Плагин NSIS с плохой строкой

Я пытался разработать 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 но результат тот же …

0

Решение

Символы ANSI, интерпретируемые как Unicode (UTF-16LE) стремится выглядеть по-китайски.

Когда вы создаете плагин Unicode, вам необходимо:

  • Удостовериться UNICODE а также _UNICODE определяется в вашем проекте / .C файлы.
  • Ссылка с pluginapi-x86-unicode.lib
  • добавлять Unicode True к вашему .NSI
  • Поместите плагин в \ NSIS \ x86-unicode

В вашем случае вы, скорее всего, забыли о Unicode True, Возврат значения работает, потому что вы никогда не меняли память server, это все та же входная строка.

2

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

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

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