查看: 5262|回复: 9

[教程] NSIS插件教程(附插件API)

[复制链接]
  • TA的每日心情
    无聊
    2019-11-3 14:42
  • 签到天数: 68 天

    [LV.6]常住居民II

    99

    主题

    453

    帖子

    5370

    积分

    积分
    5370
    发表于 2015-5-28 09:52:09 | 显示全部楼层 |阅读模式
    一位名为“~”的同学发布,轻狂转载。



    NSIS插件是一个DLL,导出的函数都有相同的参数,它的形式如下:
    1. void __declspec(dllexport) [函数名](HWND hWndParent, int string_size, char *variables, stack_t **stacktop, extra_parameters *extra)
    复制代码
    也就是说要增加一个导出函数,只是[函数名]那里不同,这个名称你自己定的
    一般来说,调用第一个DLL中的函数时,这个函数需要初始化NSIS的堆栈信息和注册插件回调函数
    其中前者的目的是得到NSIS中传过来的参数,参数是通过堆栈来获取的,因此要初始化堆栈信息
    有一个用来初始化的宏:

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

    1. extra->RegisterPluginCallback(g_hInstance, PluginCallback);
    复制代码
    插件回调函数是这样的:
    1. UINT_PTR PluginCallback(NSPIM msg)
    2. {
    3.         // 利用插件回调来释放资源!
    4.         if (msg == NSPIM_GUIUNLOAD)
    5.         {
    6.            // 有需要就用
    7.         }
    8.         else if (msg == NSPIM_UNLOAD)
    9.         {
    10.            //
    11.         }

    12.        
    13.         return 0;
    14. }
    复制代码
    插件函数举个例子:
    1. void __declspec(dllexport) test(HWND hWndParent, int string_size, char *variables, stack_t **stacktop, extra_parameters *extra)
    2. {
    3.         HWND hWnd = hWndParent;
    4.         int n;
    5.         char str[MAX_PATH];

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

    9.         n = popint();
    10.         popstringn(str,1024);

    11.         // 使用pop出来的参数做你想做的事
    12.         // ...
    13. }
    复制代码
    NSIS中调用就是(假如dll名称是plugin):
    plugin::test 参数1 参数2 参数3 参数4 "有空格的 参数" 1 -1 0.0

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

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

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

    NSIS插件教程(附插件API).zip

    7.15 KB, 下载次数: 340

    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    9

    帖子

    31

    积分

    积分
    31
    发表于 2015-11-28 21:16:27 | 显示全部楼层
    是不是  教程那个CHM里面有呢?楼主???
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2019-11-3 14:42
  • 签到天数: 68 天

    [LV.6]常住居民II

    99

    主题

    453

    帖子

    5370

    积分

    积分
    5370
     楼主| 发表于 2015-11-29 16:54:52 | 显示全部楼层
    newplayer11 发表于 2015-11-28 21:16
    是不是  教程那个CHM里面有呢?楼主???

    没有
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    2

    帖子

    3

    积分

    积分
    3
    发表于 2015-11-30 15:14:36 | 显示全部楼层
    这个真的不错啊啊!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-6-25 18:36
  • 签到天数: 75 天

    [LV.6]常住居民II

    0

    主题

    3

    帖子

    861

    积分

    积分
    861
    发表于 2016-2-14 14:10:18 | 显示全部楼层
    楼主有没有Unicode的版本啊
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    7

    帖子

    13

    积分

    积分
    13
    发表于 2016-2-17 11:12:16 | 显示全部楼层
    看看,学习学习
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-3-10 15:24
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    1

    主题

    12

    帖子

    68

    积分

    积分
    68
    发表于 2016-3-3 15:17:58 | 显示全部楼层
    学习!支持!
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    5

    帖子

    35

    积分

    积分
    35
    QQ
    发表于 2016-4-11 20:07:41 | 显示全部楼层
    学习!支持!
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2017-3-3 17:00
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    0

    主题

    15

    帖子

    89

    积分

    积分
    89
    发表于 2016-8-29 07:25:03 | 显示全部楼层
    走过路过,不错过
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2019-11-7 10:33
  • 签到天数: 2 天

    [LV.1]初来乍到

    3

    主题

    11

    帖子

    43

    积分

    积分
    43
    发表于 2019-11-6 16:12:43 | 显示全部楼层
    楼主,请问这个函数的几个参数的说明是什么哦在哪可以看到这些参数的说明?
    void __declspec(dllexport) [函数名](HWND hWndParent, int string_size, char *variables, stack_t **stacktop, extra_parameters *extra)
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Archiver|手机版|小黑屋|联系我们|NSIS中文论坛    

    GMT+8, 2019-12-6 02:07 , Processed in 0.033505 second(s), 14 queries , MemCache On.

    Powered by Discuz! X3.3

    © 2001-2019 Comsenz Inc.

    快速回复 返回顶部 返回列表