NSIS popstring只填充一个字符

时间:2018-02-04 16:02:33

标签: c++ nsis nsis-plugin

我试过从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

enter image description here

我曾尝试使用getuservariable(INST_0)作为示例,但在这里,它给了我一个空洞的结果。

你能告诉我,有什么不对吗?

1 个答案:

答案 0 :(得分:0)

这与the problem you had earlier正好相反。您仍在混合和匹配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