- 目标需求,基于现在安装包脚本。需要在用户安装和卸载成功时。进行数据记录,所以需要调用
c#dll
主要涉及到的知识点
- 需要理解脚本的文件使用机制
- 脚本的文件dll加载,和dll的调用
- c# dll的制作,和工具的使用
下面具体介绍
脚本的文件dll加载,和dll的调用
[Files]
//下面是用3F/DllExport 工具 把 c# dll 处理好了,这里引用到脚本里面来
Source: "Test_ClassLibraryAdd.dll"; DestDir: "{app}"[Code]
procedure Test(a:Integer;b:Integer);
external 'Test@files:Test_ClassLibraryAdd.dll stdcall delayload'; //注意:需要使用 stdcall delayload 延迟加载,另外需要使用x86平台编译的dll//在需要的地方进行调用 Test(1,2);
c# dll的制作,和工具的使用
- 首先创建一个 .net 库,然后在Nuget 安装 DllExport
- 安装完成后,会弹出下面的窗口,窗口弹出后。先关闭VS项目。然后安装下图说明进行操作
注意:在点击Apply按钮
前需要注意根据项目的要求勾选编译的目标平台(一般我是选择86+64)
完成上面操作后,在重新打开项目。进行代码编写,编写完成后在需要导出的函数上面添加[DllExport("XXXXX", CallingConvention = CallingConvention.StdCall)]
示例代码如下:
namespace Test_ClassLibraryAdd
{/************************************************************创建者:Lv*创建时间: 2023/12/28 21:49:27*文件功能描述:*修改说明:************************************************************/public class TestAdd{[DllExport("Test", CallingConvention = CallingConvention.StdCall)]public static int Test(int a, int b){ return a + b;}}
}
需要注意一定要使用CallingConvention = CallingConvention.StdCall
,最后生成项目,会在输出目录输出x86 和 x64 dll文件。
使用工具查看dll 的导出函数:
- 在当前你的VS项目打开VS自带的命令行工具,如下图:
- 使用cmd命令行`dumpbin /exports “xxxxxxxxx” xxx请替换为你本地编译好dll的绝对路径
如图所示:
这样就可以查看dll的导出函数。经过上面的操作,c# 制作的dll就可以给innosetup 脚本使用了!