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

2023-12-30 21:36

本文主要是介绍Innosetup 调用c# dll 和 c# dll的函数导出,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  • 目标需求,基于现在安装包脚本。需要在用户安装和卸载成功时。进行数据记录,所以需要调用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 脚本使用了!

这篇关于Innosetup 调用c# dll 和 c# dll的函数导出的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/554075

相关文章

Django调用外部Python程序的完整项目实战

《Django调用外部Python程序的完整项目实战》Django是一个强大的PythonWeb框架,它的设计理念简洁优雅,:本文主要介绍Django调用外部Python程序的完整项目实战,文中通... 目录一、为什么 Django 需要调用外部 python 程序二、三种常见的调用方式方式 1:直接 im

C#中checked关键字的使用小结

《C#中checked关键字的使用小结》本文主要介绍了C#中checked关键字的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录✅ 为什么需要checked? 问题:整数溢出是“静默China编程”的(默认)checked的三种用

C#中预处理器指令的使用小结

《C#中预处理器指令的使用小结》本文主要介绍了C#中预处理器指令的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录 第 1 名:#if/#else/#elif/#endif✅用途:条件编译(绝对最常用!) 典型场景: 示例

Mybatis对MySQL if 函数的不支持问题解读

《Mybatis对MySQLif函数的不支持问题解读》接手项目后,为了实现多租户功能,引入了Mybatis-plus,发现之前运行正常的SQL语句报错,原因是Mybatis不支持MySQL的if函... 目录MyBATis对mysql if 函数的不支持问题描述经过查询网上搜索资料找到原因解决方案总结Myb

C#实现将XML数据自动化地写入Excel文件

《C#实现将XML数据自动化地写入Excel文件》在现代企业级应用中,数据处理与报表生成是核心环节,本文将深入探讨如何利用C#和一款优秀的库,将XML数据自动化地写入Excel文件,有需要的小伙伴可以... 目录理解XML数据结构与Excel的对应关系引入高效工具:使用Spire.XLS for .NETC

C#如何在Excel文档中获取分页信息

《C#如何在Excel文档中获取分页信息》在日常工作中,我们经常需要处理大量的Excel数据,本文将深入探讨如何利用Spire.XLSfor.NET,高效准确地获取Excel文档中的分页信息,包括水平... 目录理解Excel中的分页机制借助 Spire.XLS for .NET 获取分页信息为什么选择 S

Java调用DeepSeek API的8个高频坑与解决方法

《Java调用DeepSeekAPI的8个高频坑与解决方法》现在大模型开发特别火,DeepSeek因为中文理解好、反应快、还便宜,不少Java开发者都用它,本文整理了最常踩的8个坑,希望对... 目录引言一、坑 1:Token 过期未处理,鉴权异常引发服务中断问题本质典型错误代码解决方案:实现 Token

C#高效实现在Word文档中自动化创建图表的可视化方案

《C#高效实现在Word文档中自动化创建图表的可视化方案》本文将深入探讨如何利用C#,结合一款功能强大的第三方库,实现在Word文档中自动化创建图表,为你的数据呈现和报告生成提供一套实用且高效的解决方... 目录Word文档图表自动化:为什么选择C#?从零开始:C#实现Word文档图表的基本步骤深度优化:C

Python容器转换与共有函数举例详解

《Python容器转换与共有函数举例详解》Python容器是Python编程语言中非常基础且重要的概念,它们提供了数据的存储和组织方式,下面:本文主要介绍Python容器转换与共有函数的相关资料,... 目录python容器转换与共有函数详解一、容器类型概览二、容器类型转换1. 基本容器转换2. 高级转换示

在C#中分离饼图的某个区域的操作指南

《在C#中分离饼图的某个区域的操作指南》在处理Excel饼图时,我们可能需要将饼图的各个部分分离出来,以使它们更加醒目,Spire.XLS提供了Series.DataFormat.Percent属性,... 目录引言如何设置饼图各分片之间分离宽度的代码示例:从整个饼图中分离单个分片的代码示例:引言在处理