我试图在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 :(得分:2)
ANSI字符解释为Unicode(UTF-16LE)tends to look Chinese。
创建Unicode插件时,您需要:
UNICODE
和_UNICODE
已在您的项目/ .C文件中定义。Unicode True
添加到.NSI 在您的情况下,您很可能忘记了Unicode True
。返回值是有效的,因为你从未真正改变server
的内存,它仍然是相同的输入字符串。