作者:kagula
时间:2016-06-03
Q 如何使用C++开发插件,示例
环境:VS2013Update4
参考资料[3]来做
S1:新建一个空的C++DLL项目,nsMessageBoxPlugin.
S2:复制“ C:\Program Files (x86)\NSIS\Unicode\Examples\Plugin\nsis”文件夹到
当前solution下。
S3:当前project头文件和库文件搜索路径设为“$(SolutionDir)nsis;”
S4:把nsis中的头文件加到当前project中。
S5:为当前project添加nsMessageBoxPlugin.c文件。源文件清单如下。
S6:把project生成的“nsMessageBoxPlugin.dll”复制到“
时间:2016-06-03
Q 如何使用C++开发插件,示例
环境:VS2013Update4
参考资料[3]来做
S1:新建一个空的C++DLL项目,nsMessageBoxPlugin.
S2:复制“ C:\Program Files (x86)\NSIS\Unicode\Examples\Plugin\nsis”文件夹到
当前solution下。
S3:当前project头文件和库文件搜索路径设为“$(SolutionDir)nsis;”
S4:把nsis中的头文件加到当前project中。
S5:为当前project添加nsMessageBoxPlugin.c文件。源文件清单如下。
#include <windows.h>
#include <pluginapi.h> // nsis plugin
HWND g_hwndParent;
// To work with Unicode version of NSIS, please use TCHAR-type
// functions for accessing the variables and the stack.
void __declspec(dllexport) myFunction(HWND hwndParent, int string_size,
TCHAR *variables, stack_t **stacktop,
extra_parameters *extra)
{
g_hwndParent = hwndParent;
EXDLL_INIT();
//读取输入参数
WCHAR szComponent[256];
popstring(szComponent);
//打印参数
WCHAR buf[1024];
//这里能正确打印出来自NSIS的中文信息。
wsprintf(buf, L"kagula $0=[%s][中文测试]\n", szComponent);
MessageBoxW(g_hwndParent, buf, 0, MB_OK);
//准备返回参考
int len = (int)wcslen(szComponent);
// make a little change to input parameter
// below shift a unit character.
for (int i = 0; i < len; ++i)
szComponent[i] += 1;
// push back on the stack
pushstring(szComponent);
}
/*
nsMessageBoxPlugin::myFunction "abcdefg[来自NSIS的中文测试]"
Pop $0
MessageBox MB_OK "ret = $0"
#打印来自C++的中文会乱码。
*/
S6:把project生成的“nsMessageBoxPlugin.dll”复制到“