最新消息:

NSIS插件教程(附插件API)

nsis 永恒心锁 1704浏览 0评论

NSIS插件是一个DLL,导出的函数都有相同的参数,它的形式如下:

void __declspec(dllexport) [函数名](HWND hWndParent, int string_size, char *variables, stack_t **stacktop, extra_parameters *extra)

也就是说要增加一个导出函数,只是[函数名]那里不同,这个名称你自己定的
一般来说,调用第一个DLL中的函数时,这个函数需要初始化NSIS的堆栈信息和注册插件回调函数
其中前者的目的是得到NSIS中传过来的参数,参数是通过堆栈来获取的,因此要初始化堆栈信息
有一个用来初始化的宏:

NSIS_PLUGIN_INIT();

还有就是注册插件回调了,如果没有注册,貌似会出错,这个注册的目的是为了让NSIS知道怎么卸载这个插件
卸载时产生2个消息,注册是这样:

extra->RegisterPluginCallback(g_hInstance, PluginCallback);

插件回调函数是这样的:

UINT_PTR PluginCallback(NSPIM msg)
{
 // 利用插件回调来释放资源!
 if (msg == NSPIM_GUIUNLOAD) 
 {
 // 有需要就用
 }
 else if (msg == NSPIM_UNLOAD)
 {
 // 
 }

 
 return 0;
}

插件函数举个例子:

void __declspec(dllexport) test(HWND hWndParent, int string_size, char *variables, stack_t **stacktop, extra_parameters *extra)
{
 HWND hWnd = hWndParent;
 int n;
 char str[MAX_PATH];

 NSIS_PLUGIN_INIT();
 // g_hInstance是一个全局变量,一般在DllMain中由hModule得到
 extra->RegisterPluginCallback(g_hInstance, PluginCallback);

 n = popint();
 popstringn(str,1024);

 // 使用pop出来的参数做你想做的事
 // ...
}

NSIS中调用就是(假如dll名称是plugin):
plugin::test 参数1 参数2 参数3 参数4 “有空格的 参数” 1 -1 0.0

参数其实全部都是字符串,所以,这里的参数多少你自己定,主要是在插件函数中popstringn、popint等函数的调用
你自己pop出来了

这里的参数给了这么多,但是test函数中只pop了2次,因此只有前面2个参数被用到

===============================================================================
注意:如果是使用C++,那么还需要一个模块定义文件,这样就能保证导出的函数是C风格的

https://yunpan.cn/cxKKICPSgzbxk (提取码:d975)

 

 

免责声明:根据《计算机软件保护条例》第十七条规定“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。”您需知晓本站所有内容资源均来源于网络,仅供用户交流学习与研究使用,版权归属原版权方所有,版权争议与本站无关,用户本人下载后不能用作商业或非法用途,需在24个小时之内从您的电脑中彻底删除上述内容,否则后果均由用户承担责任;如果您访问和下载此文件,表示您同意只将此文件用于参考、学习而非其他用途,否则一切后果请您自行承担,如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。丨本站为个人博客非盈利性站点,所有软件信息均来自网络,所有资源仅供学习参考研究目的,并不贩卖软件,不存在任何商业目的及用途。丨本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权BY-NC-SA协议进行授权

转载请注明:永恒心锁-分享互联网 » NSIS插件教程(附插件API)

您必须 登录 才能发表评论!