NSIS插件开发详解:DLL调用与函数规范

需积分: 9 7 下载量 108 浏览量 更新于2024-09-13 收藏 238KB PDF 举报
"NSIS插件开发规范" NSIS(Nullsoft Scriptable Install System)是一种流行的开源安装包制作工具,它的核心功能相对有限,但通过插件机制,开发者可以编写DLL动态链接库来扩展其功能。从NSIS 2.x版本开始,插件的集成变得更加简便。在NSIS脚本中,只需使用`DLL::func`的语法调用插件命令,其中`DLL`是插件DLL文件的名称,`func`是DLL导出的函数名。在编译时,NSIS会自动处理DLL,将其打包并释放到临时的插件目录$PLUGINSDIR。这个目录在安装完成后会被自动清理。 $PLUGINSDIR通常是一个位于临时文件夹下的随机生成的子目录,它会在首次执行插件命令时被创建。如果在调用插件命令之前需要使用此目录来存放资源,可以使用`InitPluginsDir`指令来预先创建。 NSIS插件本质上是DLL文件,其导出函数必须遵循C语言的调用约定`__cdecl`。下面是一个示例导出函数: ```cpp #ifdef __cplusplus extern "C" #endif __declspec(dllexport) void __cdecl myFunction(HWND hwndParent, int string_size, TCHAR *variables, stack_t **stacktop, extra_parameters *extra); #ifdef __cplusplus } #endif ``` 这里的`hwndParent`参数是NSIS主窗口的句柄,NSIS脚本中可以使用常量`$HWNDPARENT`来引用它。在NSIS中,常量以`$`开头并用花括号包围,比如`${NSISDIR}`,它们在编译时解析,类似于C语言的宏。而变量以`$`开头,后面直接跟一个合法的变量名,且在运行时可被修改。 对于`hwndParent`,尽管它的值在运行时才能确定,但因为它在脚本执行过程中不应被修改,所以采用了类似常量的表示方式。这与C/C++中的`const`关键字类似,即这些常量在编译时被限定为不可修改。 开发NSIS插件时,你可以选择C/C++、Delphi或Win32汇编语言等工具,只要确保遵循C风格的导出规则和`__cdecl`调用约定。通过这种方式,NSIS插件可以实现各种自定义功能,如文件操作、注册表编辑、网络通信等,极大地增强了NSIS安装程序的灵活性和功能范围。