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

#Northn

Police Helper «Reborn» — уже ШЕСТЬ лет!
Всефорумный модератор
2,633
2,479
Изучаю С++, возникла идея избавиться от стандартов C#.
Имею код
C++:
case ScriptRPCEnumeration::RPC_ScrClientMessage:
    uint32 color; std::string msg;
    params->bitStream->ResetReadPointer();
    params->bitStream->Read(color);
    params->bitStream->SetReadOffset(32);
    params->bitStream->Read(msg);
    print(msg);
Но он не хочет работать с классом std нормально.
Читал, что тип std::string самостоятельно устанавливает конец строки и ему не нужно дополнительно узнавать размер, по крайней мере так говорит сам VS
45541


Если туда ещё и передавать размер:
45542


Я что-то не так понимаю?
 

Musaigen

abobusnik
Проверенный
1,581
1,300
Изучаю С++, возникла идея избавиться от стандартов C#.
Имею код
C++:
case ScriptRPCEnumeration::RPC_ScrClientMessage:
    uint32 color; std::string msg;
    params->bitStream->ResetReadPointer();
    params->bitStream->Read(color);
    params->bitStream->SetReadOffset(32);
    params->bitStream->Read(msg);
    print(msg);
Но он не хочет работать с классом std нормально.
Читал, что тип std::string самостоятельно устанавливает конец строки и ему не нужно дополнительно узнавать размер, по крайней мере так говорит сам VSПосмотреть вложение 45541

Если туда ещё и передавать размер:
Посмотреть вложение 45542

Я что-то не так понимаю?
 

traceattack

Известный
218
119
Делаю SF плагин, нужно усложие, чтобы при нажатии TAB и открытом чате... У меняя так:
C++:
if (SF->getGame()->isKeyPressed('TAB') && SF->getSAMP()->getInput()->iInputEnabled == 1) prt();
что-то тут не так
1:
if (SF->getGame()->isKeyPressed(VK_TAB) && SF->getSAMP()->getInput()->iInputEnabled ) prt();
Я не хочу использовать char, я же упомянул об этом.
2:
        UINT32 dColor;
        UINT32 dMessageLength;
        char temp[144];

        params->bitStream->ResetReadPointer();
        params->bitStream->Read( dColor );
        params->bitStream->Read( dMessageLength );
        params->bitStream->Read( temp , dMessageLength  );
        temp[dMessageLength] = '\0';

        std::string str = temp;
В классе стринг , нет такого конструктора насколько я знаю;
 
Последнее редактирование:
  • Грустно
Реакции: #Northn

papercut

Участник
90
13
Думаю, этог одостаточно будет:
void CALLBACK  prt() {
    std::string startstr = "{5e625d}[SF]{ffffff}: {c7de39}TAB-nick {5ede37}LOADED";
    char* start = _strdup(startstr.c_str());
    char t[10];
    sprintf(t, "%d", SF->getSAMP()->getInput()->iInputEnabled);
    SF->getSAMP()->getChat()->AddChatMessage(-1, start);
}

void CALLBACK mainloop()
{
    static bool init = false;
    if (!init)
    {
        init = true;
    }
    if (SF->getGame()->isKeyPressed(VK_TAB) && SF->getSAMP()->getInput()->iInputEnabled) prt();
}
 

traceattack

Известный
218
119
\
Думаю, этог одостаточно будет:
void CALLBACK  prt() {
    std::string startstr = "{5e625d}[SF]{ffffff}: {c7de39}TAB-nick {5ede37}LOADED";
    char* start = _strdup(startstr.c_str());
    char t[10];
    sprintf(t, "%d", SF->getSAMP()->getInput()->iInputEnabled);
    SF->getSAMP()->getChat()->AddChatMessage(-1, start);
}

void CALLBACK mainloop()
{
    static bool init = false;
    if (!init)
    {
        init = true;
    }
    if (SF->getGame()->isKeyPressed(VK_TAB) && SF->getSAMP()->getInput()->iInputEnabled) prt();
}
Не вижу никакой логики в программе , что ты конкретно хочешь?
 

Lil Xean

о да моя госпожа
212
225
Можно пожалуйста простенький гайд по структуре самой дллки, и как её перегнать в .asi?
 

papercut

Участник
90
13
Да, спасибо за совет(без рофла). Только из этого следует вопрос по wndproc:

При компиляции этого кода
По плану он должен исполняться:
void CALLBACK prtbtn(std::string c) {
    char* btn = _strdup(c.c_str());
    SF->getSAMP()->getChat()->AddChatMessage(-1, btn);
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    if (message == WM_KEYDOWN) {
        if(wParam == 'Y') prtbtn("Pressed");
        return 0L;
    }
    return DefWindowProc(hWnd, message, wParam, lParam);
}

Выходит ошибка:Ошибка LNK2019 ссылка на неразрешенный внешний символ __imp__DefWindowProcA@16 в функции "long __stdcall WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND__@@IIJ@Z)
 

Musaigen

abobusnik
Проверенный
1,581
1,300
Какой адрес у функции, которую вызывает опкод 00с2 в клео?