Я пытался разработать NSIS Plugin
в C++
,
Вот мой метод установки информации из NSIS:
void __declspec(dllexport) SetCredentials(HWND hWndParent, int string_size, TCHAR *variables, stack_t **stacktop, extra_parameters *extra) {
EXDLL_INIT();
server = getuservariable(INST_0);
port = myatou(getuservariable(INST_1));
database = getuservariable(INST_2);
username = getuservariable(INST_3);
password = getuservariable(INST_4);
MessageBox(hWndParent, server, L"Info", MB_OK); // Here is the problem
setuservariable(INST_0, server);
}
Образец:
OutFile "Example.exe"BrandingText " "
Section
MySQL::SetCredentials "localhost" 3306 "banananode" "root" ""Pop $0
MessageBox MB_OK "Server: $0" ; Returns the server value...
SectionEnd
Проблема в том, когда я пытаюсь распечатать server
переменная, будут отображаться китайские символы, а не правильный текст:
Когда я возвращаю значение с setuservariable(INST_0, server);
NSIS будет отображать его правильно:
Можете ли вы сказать мне, что не так?
Я пытался построить результат .dll
с pluginapi-x86-ansi.lib
а также pluginapi-x86-unicode.lib
но результат тот же …
Символы ANSI, интерпретируемые как Unicode (UTF-16LE) стремится выглядеть по-китайски.
Когда вы создаете плагин Unicode, вам необходимо:
UNICODE
а также _UNICODE
определяется в вашем проекте / .C файлы.Unicode True
к вашему .NSIВ вашем случае вы, скорее всего, забыли о Unicode True
, Возврат значения работает, потому что вы никогда не меняли память server
, это все та же входная строка.
Других решений пока нет …