最新消息:

NSIS自定义dll扩展

nsis 永恒心锁 1533浏览 0评论

NSIS是一个功能强大的安装卸载包制作工具,通过dll可以扩展很多功能,你也可以自定义一个dll,以下是具体步骤:

1.新建一个mfc dll(本例Hello.dll)

1.1 添加对nsis库的引用:

NSIS自定义dll扩展

NSIS自定义dll扩展

在Hello.cpp中声明对nsis库的引用:

// Hello.cpp : 定义 DLL 的初始化例程。
//

#include "stdafx.h"
#include "Hello.h"

#include <windows.h>
#include <stdio.h>

// 生成的dll放置在NSIS\Plugins下
// 项目属性->配置属性->链接器->输入->忽略特定库: LIBC.lib(解决无法打开libc.lib的错误)
#include "nsis/pluginapi.h" // nsis plugin,需要拷贝nsis的库文件
#pragma comment(lib, "nsis/pluginapi.lib")
#define NSISAPI extern "C" __declspec(dllexport) void __cdecl //C,避免nsis脚本重定义函数名

1.2 完成一个用来测试的方法:

/*
 * 在nsis脚本中调用方法myPlugin::myFunction /NOUNLOAD $2
 * /NOUNLOAD 表示调用完此方法后不卸载这个dll,用于保存dll的数据
 * hwndParent:安装窗口的句柄
 * stacktop:nsis传入的参数堆栈, 通过popint/popstring 可以取出来
 * extra:插件里面调用script的函数就需要用到这个
 */
NSISAPI TestFunc(HWND hwndParent, int string_size, char *variables, stack_t **stacktop, extra_parameters *extra)
{
 EXDLL_INIT(); //初始化,方法开始位置必加

 char sParam[MAX_PATH];
 if(popstring(sParam) == 0)
 {
 CString str;
 str = sParam;
 AfxMessageBox(str);
 }
}

2.新建一个hello.nsi来测试我们的dll是否可以被调用成功

nsis脚本:

OutFile "Test.exe"

Section
 Hello::TestFunc /NOUNLOAD "hello nsis dll"
SectionEnd

编译运行,调用成功效果如下:

NSIS自定义dll扩展

 

 

 

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

转载请注明:永恒心锁-分享互联网 » NSIS自定义dll扩展

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