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 脚本使用了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/309578.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙应用开发 Web 组件抽奖

1 概述 相信大家都遇到过这样的场景,有时候我们点击应用的页面,会跳转到一个类似浏览器加载的页面,加载完成后,才显示这个页面的具体内容,这个加载和显示网页的过程通常都是浏览器的任务。 ArkUI 为我们提供了 Web 组…

小米汽车 SU7 技术发布会-智能驾驶猜想,真的“吊打”特斯拉?

核心主题 本人AI数据工程师,看完小米汽车 SU7 技术发布会,主谈智能驾驶猜想。 小米汽车披露:智能驾驶要2024年跻身第一梯队 发布会前沿致敬经典,挺好的毕竟礼多人不怪。 见面道辛苦,必定是江湖。 见面致经典&#…

hyperf console 执行

一、原理描述 hyperf中,不难发现比如自定义控制器中获取参数,hyperf.php中容器获取,传入的都是接口,而不是实体类。 这是因为框架中的配置文件有设置对应抽象类的子类,框架加载的时候将其作为数组,使用的…

《Linux系统与网络管理》复习题库---简答题

1、简述这些分区的名字以及各自的作用。 答: /boot 存放内核镜像的地方,这个文件夹独立分区的意义在于降低不能开机的风险。 /根目录,一般采用 etx3 文件系统,分区的容量一定要大于安装软件包的容量。 /usr 多数软件的默认安装的地…

ssm基于vue框架的点餐系统的设计与实现+vue论文

基于vue框架的点餐系统的设计与实现 摘要 当下,正处于信息化的时代,许多行业顺应时代的变化,结合使用计算机技术向数字化、信息化建设迈进。传统的点餐信息管理模式,采用人工登记的方式保存相关数据,这种以人力为主的…

私有部署ELK,搭建自己的日志中心(六)-- 引入kafka对采集日志进行削峰填谷

一、背景 首先,要说明一点,elk日志中心,是可以缺少kafka组件的。 其次,如果是研发环境下,机器资源紧张的情况下,也是可不部署kafka。 最后,因为kafka的部署是可以独立的,所以本文将…

Scrapy使用案例——爬取豆瓣Top 250电影数据

文章目录 什么是Scrapy?创建Scrapy项目编写Scrapy Spider创建Item类配置数据存储运行Scrapy爬虫处理常见问题结论Python技术资源分享1、Python所有方向的学习路线2、学习软件3、入门学习视频4、实战案例5、清华编程大佬出品《漫画看学Python》6、Python副业兼职与全…

2023年03月22日_谷歌Bard开放公测的解读

文章目录 定位谷歌的求生欲Bard的演示翻车 2023年3月22日 面对OpenAI和微软的步步紧逼 谷歌这次终于呢不再坐以待毙了 昨天 谷歌正式宣布开放旗下Bard的公测 作为跟ChatGPT的正面竞争 首先呢面向英国和美国地区启动 目前这两个国家的用户呢 都可以在Bard.google.com 上…

【网络安全】网络隔离设备

一、网络和终端隔离产品 网络和终端隔离产品分为终端隔离产品和网络隔离产品两大类。终端隔离产品一般指隔离卡或者隔离计算机。网络隔离产品根据产品形态和功能上的不同,该类产品可以分为协议转换产品、网闸和网络单向导入产品三种。 图1为终端隔离产品的一个典型…

提升客户体验!十大热门客户服务软件解决方案推荐

现代企业深切认识到客户关系对于成功至关重要。如今,顾客越来越偏向于个性化和情境化服务的企业。根据Forrester的研究,将优先考虑建立更好客户关系以实现长期增长将是2023年业务成功的关键。 为了评估和改善客户关系,您需要一个系统化的方式…

自激振荡电路笔记 电弧打火机

三极管相关 三极管的形象描述 二极管 简单求解(理想) 优先导通(理想) 恒压降 稳压管(二极管plus) 基础工作模块 理想稳压管的工作特性 晶体管之三极管(“两个二极管的组合” ) 电弧打火机电路 1.闭合开…

【MySQL】主从异步复制配置

您好,我是码农飞哥(wei158556),感谢您阅读本文,欢迎一键三连哦。 💪🏻 1. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当。 Python从入门到精…