Innosetup 调用c# dll 和 c# dll的函数导出

发布时间:2023年12月29日
  • 目标需求,基于现在安装包脚本。需要在用户安装和卸载成功时。进行数据记录,所以需要调用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 脚本使用了!
文章来源:https://blog.csdn.net/weixin_38940097/article/details/135283148
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。