Всплывающая строка NSIS заполняет только один символ

Я пытался прочитать параметры из NSIS Call, как:

MySQL::SetCredentials "localhost" 3306 "banananode" "root" ""

На методе я попытался получить первый параметр с popstring как пример кода на NSIS:

LPTSTR mystringbuffer = (LPTSTR)GlobalAlloc(GPTR, (3 + string_size + 1) * sizeof(*mystringbuffer));
int test = popstring(mystringbuffer);
MessageBox(hWnd, mystringbuffer, TEXT("plug-in"), MB_OK);
GlobalFree(mystringbuffer);

Но popstring только возвращается l и не localhost:

введите описание изображения здесь

Я пытался использовать getuservariable(INST_0) для примера, но здесь, это дает мне пустой результат.

Можете ли вы сказать мне, что не так?

0

Решение

Это просто противоположность проблема у вас была раньше. Вы по-прежнему смешиваете и сопоставляете строки / функции ANSI и Unicode. Одна буква означает, что вы читаете строку Unicode как строку ANSI. L"localhost" (l\0o\0c\0a\0l\0h\0o\0s\0t\0\0\0) как строка ANSI просто "l" (l\0).

Возможно, это уменьшит путаницу:

void __declspec(dllexport) test(HWND hWndParent, ...)
{
MessageBox(hWndParent, sizeof(OSVERSIONINFOA) < sizeof(OSVERSIONINFO) ? TEXT("Unicode plug-in") : TEXT("ANSI plug-in"), TEXT("I'm a"), 0);
}

а также

Section
!if "${NSIS_CHAR_SIZE}" > 1
MessageBox mb_ok "Unicode installer"!else
MessageBox mb_ok "ANSI installer"!endif
myplugin::test
SectionEnd
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]