我试过从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
:
我曾尝试使用getuservariable(INST_0)
作为示例,但在这里,它给了我一个空洞的结果。
你能告诉我,有什么不对吗?
答案 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