带有错误字符串的NSIS插件

时间:2018-02-04 12:24:50

标签: c++ nsis nsis-plugin

我试图在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变量时,会显示中文字符,而不是正确的文字:

enter image description here

当我使用setuservariable(INST_0, server);返回值时,NSIS将正确显示:

enter image description here

你告诉我,有什么不对吗? 我已尝试使用.dllpluginapi-x86-ansi.lib构建结果pluginapi-x86-unicode.lib,但结果是相同的......

1 个答案:

答案 0 :(得分:2)

ANSI字符解释为Unicode(UTF-16LE)tends to look Chinese

创建Unicode插件时,您需要:

  • Make sure UNICODE_UNICODE已在您的项目/ .C文件中定义。
  • 与pluginapi-x86-unicode.lib
  • 链接
  • Unicode True添加到.NSI
  • 将插件放在\ NSIS \ x86-unicode

在您的情况下,您很可能忘记了Unicode True。返回值是有效的,因为你从未真正改变server的内存,它仍然是相同的输入字符串。