Другое С/С++ Вопрос - Ответ

sizeoftrickster

Известный
Проверенный
139
558
1.Ваш вопрос: Как в dll / asi добавить wait, который идет с GTA SA опкодом 0001 ?
Еще вариант используя plugin sdk
C++:
#include <plugin.h>
#include "extensions/ScriptCommands.h"

// Тут находится весь список опкодов -> extenstions/scripting/ScriptCommandNames.h
plugin::Command<WAIT>( 1000 );
 

p1cador

cerf
Проверенный
221
359
Есть код:
C++:
#include <iostream>

char __attribute__ ((section (".TST"))) buffer[0x20];

int main(int argc, char* argv[])
{
    std::cout << "0x" << std::hex << (void*)buffer << std::endl;
    return 0;
}

Получившийся в результате компиляции(g++) и линковки виндовый x86 экзешник работает корректно.

Если же добавляю линковщику флаг --section-start,.TST=0x500000, собравшийся .exe не запускается:

Посмотреть вложение 170497

Сравнил оба .exe файла, никаких серьезных различий не нашел. Например, вот отличия между IMAGE_OPTIONAL_HEADER32 рабочего .exe файла (слева) и нерабочего (справа). Отличия подчеркнул красным для удобства
Посмотреть вложение 170498

Тут все справедливо: все адреса после 0x4000 смещены, потому что по адресу 0x4000 располагается .TST секция

Также вот секционные заголовки рабочего (слева) и нерабочего (справа) экзешников:
Посмотреть вложение 170500


Тоже все выглядит нормально.

У меня было только одно предположение - в выравнивании. Явно укзаал линковщику выравнивание кратное 512 --section-alignment=0x1000 --file-alignment=0x1000. Не помогло.
Куда копать, в чем проблема?
up
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
C++:
struct Contact
{
    string name, phone, namePlusPhone;
    Contact(string& _name, string& _phone) :name(_name), phone(_phone), namePlusPhone(_phone + ": " + _name) {};
};
..
set <Contact> contacts;
contacts.insert(Contact("Jack Nilson", "+841414455"));
1664729169813.png
патему
 

chapo

чопа сребдс // @moujeek
Модератор
8,862
11,551
Почему диалог не отображается еще раз после нажатия на кнопку в этом же диалоге? При этом в консоль выводит "Dialog shown!"
C++:
void ShowDialog() {
    string Text = "";

    for (int GangIndex = 0; GangIndex < Settings.size(); GangIndex++) {
        Text.append(Settings[GangIndex].name + "\t" + (Settings[GangIndex].enabled ? "ON" : "OFF") + "\n");
    }
    SF->getSAMP()->getDialog()->ShowDialog(DialogId, 2, "dialogtitle", (char*)Text.c_str(), "TOGGLE", "X");
    cout << "Dialog shown!" << endl;
}


void CALLBACK dialogCallback(int dialogId, int buttonId, int listItem, const char* input) {
    if (dialogId == DialogId && buttonId == 1) {
        if (listItem >= 0 && listItem <= Settings.size()) {
            Settings[listItem].enabled = !Settings[listItem].enabled;
            cout << "State: " + (Settings[listItem].enabled ? "ON" : "OFF") << endl;
        }
        ShowDialog();
    }
 

#Northn

Pears Project — уже запущен!
Всефорумный модератор
2,650
2,535
Почему диалог не отображается еще раз после нажатия на кнопку в этом же диалоге? При этом в консоль выводит "Dialog shown!"
C++:
void ShowDialog() {
    string Text = "";

    for (int GangIndex = 0; GangIndex < Settings.size(); GangIndex++) {
        Text.append(Settings[GangIndex].name + "\t" + (Settings[GangIndex].enabled ? "ON" : "OFF") + "\n");
    }
    SF->getSAMP()->getDialog()->ShowDialog(DialogId, 2, "dialogtitle", (char*)Text.c_str(), "TOGGLE", "X");
    cout << "Dialog shown!" << endl;
}


void CALLBACK dialogCallback(int dialogId, int buttonId, int listItem, const char* input) {
    if (dialogId == DialogId && buttonId == 1) {
        if (listItem >= 0 && listItem <= Settings.size()) {
            Settings[listItem].enabled = !Settings[listItem].enabled;
            cout << "State: " + (Settings[listItem].enabled ? "ON" : "OFF") << endl;
        }
        ShowDialog();
    }
потому что это локальный диалог, а не серверный. dialogCallback не вызовется
 

chapo

чопа сребдс // @moujeek
Модератор
8,862
11,551
потому что это локальный диалог, а не серверный. dialogCallback не вызовется
он вызывается, мб я плохо описал проблему:
1. есть команда, допустим /menu
2. после ввода команды диалог отображается и функция dialogCallback выполняется (значения меняются, в консоль выводится инфа)
сама проблема: после нажатия на кнопку в диалоге мне надо открыть диалог еще раз, функция ShowDialog выполняется (в консоль выводится текст), но сам диалог не появляется.
 

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,744
4,806
он вызывается, мб я плохо описал проблему:
1. есть команда, допустим /menu
2. после ввода команды диалог отображается и функция dialogCallback выполняется (значения меняются, в консоль выводится инфа)
сама проблема: после нажатия на кнопку в диалоге мне надо открыть диалог еще раз, функция ShowDialog выполняется (в консоль выводится текст), но сам диалог не появляется.
на момент нажатия на кнопку диалог все еще считается открытым сампом емнип
 
  • Нравится
Реакции: ARMOR

Chilim

Потрачен
71
6
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Всем привет,такая проблема, не могу найти сборку решений х86 для OpenCv а самому собирать не охото,может у кого то есть и сможет поделиться? буду благодарен")
 
  • Ха-ха
  • Нравится
Реакции: Barsyk и legendabrn
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Для std::set нужны оператор сравнения для сортировки.

Решение - использовать std::unordered_set, или написать операторы сравнения(==;!=;<;>;)
я этот код сократил и кинул только нужное для понимания, дело в не в этом, оно почему то не может использовать значение по ссылке, когда убираю & - программа компилируется
C++:
struct Contact
{
    string name, phone, namePlusPhone;
    Contact(string& _name, string& _phone) :name(_name), phone(_phone), namePlusPhone(_name + ": " + _phone) {};
    operator const char* () const
    {
        return namePlusPhone.c_str();
    }
    bool operator == (const Contact& item) const
    {
        return (item.name  == this->name);
    }
    bool operator < (const Contact& item) const
    {
        return (item.name > this->name);

    }
};


int main()
{

    set <Contact> contacts;
    contacts.insert(Contact("Jack Nilson", "+841414455"));
    contacts.insert(Contact("Hardi Jel", "+311414141"));
    contacts.insert(Contact("Andy Kil", "+42523412"));
    contacts.insert(Contact("Leon Brawl", "+532342342342"));
    contacts.insert(Contact("Jackson Will", "+32466666621"));
    contacts.insert(Contact("Andrew Redmond", "+41414345346"));
    contacts.insert(Contact("Julia Breed", "+54312346236"));
}
 
Последнее редактирование:

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,744
4,806
я этот код сократил и кинул только нужное для понимания, дело в не в этом, оно почему то не может использовать значение по ссылке, когда убираю & - программа компилируется
C++:
struct Contact
{
    string name, phone, namePlusPhone;
    Contact(string& _name, string& _phone) :name(_name), phone(_phone), namePlusPhone(_name + ": " + _phone) {};
    operator const char* () const
    {
        return namePlusPhone.c_str();
    }
    bool operator == (const Contact& item) const
    {
        return (item.name  == this->name);
    }
    bool operator < (const Contact& item) const
    {
        return (item.name > this->name);

    }
};


int main()
{

    set <Contact> contacts;
    contacts.insert(Contact("Jack Nilson", "+841414455"));
    contacts.insert(Contact("Hardi Jel", "+311414141"));
    contacts.insert(Contact("Andy Kil", "+42523412"));
    contacts.insert(Contact("Leon Brawl", "+532342342342"));
    contacts.insert(Contact("Jackson Will", "+32466666621"));
    contacts.insert(Contact("Andrew Redmond", "+41414345346"));
    contacts.insert(Contact("Julia Breed", "+54312346236"));
}
в конструкторе ссылка константная должна быть чтобы туда временное значение можно было сконструировать
 

MeG@LaDo[N] ^_^

Известный
280
319
у меня есть текст в пастебин и мне нужно отправить GET запрос через boost и записать текст в переменную, как можно отправить запрос через эту либу? чекал
в интернете темы но не особо понял