C# 动态加载dll

 方式1

using System;
using System.Reflection;class Program
{static void Main(){string dllPath = "path/to/your/library.dll"; // 替换为你的DLL文件路径Assembly myAssembly = Assembly.LoadFile(dllPath);Type myType = myAssembly.GetType("YourNamespace.YourClass"); // 替换为你的类型名称object myInstance = Activator.CreateInstance(myType);// 调用DLL中的方法MethodInfo myMethod = myType.GetMethod("YourMethod"); // 替换为你的方法名称myMethod.Invoke(myInstance, null); // 如果方法不需要参数,使用null,否则提供适当的参数数组Console.WriteLine("DLL方法已被调用。");}
}

方式二 

 [DllImport("C:\\Program Files\\****\\****.dll")]
internal static extern int Function(int Code);

以上方式发现dll的路径是固定的,我们通过以下方式可以成功加载dll

var path = Environment.GetEnvironmentVariable("PATH");
if (path != null)
{path = path.TrimEnd(';')+";";var ProBinDir = "";//指定路径或者从注册表中获取if (ProBinDir != null)Environment.SetEnvironmentVariable("PATH", path += $"{ProBinDir}\\bin;");elseTrace.TraceError("获取路径失败");
}
[DllImport("****.dll")]
internal static extern int Function(int Code);

实例

整体文件

步骤

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace ZWH
{public class Class1{public void putoutZWH() {Console.WriteLine("ZWH");}}
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;namespace ConsoleApp20
{internal class Program{static void Main(string[] args){// 加载 ZWH.dll 程序集Assembly assembly = Assembly.LoadFrom("E:\\workspace\\ConsoleApp20\\ZWH\\bin\\Debug\\ZWH.dll");// 获取 ZWH.Class1 类型Type type = assembly.GetType("ZWH.Class1");// 创建 ZWH.Class1 的实例object obj = Activator.CreateInstance(type);// 获取 putoutZWH 方法的 MethodInfoMethodInfo method = type.GetMethod("putoutZWH");// 调用 putoutZWH 方法method.Invoke(obj, null);// 等待用户按下任意键退出程序Console.ReadKey();}}
}

 结果

参考文献

C#动态调用DLL_c# 动态加载dll-CSDN博客

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

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

相关文章

番外篇 | YOLOv8改进之在C2f中引入即插即用RepViTBlock模块 | CVPR2024清华RepViT

前言:Hello大家好,我是小哥谈。YOLOv8是一种基于深度学习的实时物体检测算法,其通过将物体检测任务转化为目标框回归问题,并使用卷积神经网络实现高效的特征提取和目标分类。然而,YOLOv8在处理一些复杂场景和小目标时可能存在一定的性能限制。为了克服YOLOv8的局限性,清华…

JMM与内存屏障

一、cpu多核并发缓存架构解析 JMM内存模型:java多线程内存模型跟cpu缓存模型类似,是基于cpu缓存模型来建立的,java线程内存模型是标准化的,屏蔽掉了底层不同计算机的区别 JMM数据原子操作 read(读取):从主内存读取数据…

算法题解记录17+++完全平方数

这是楼主第一次不靠题解,挑战动态规划的中等题目,虽然最终结果只超过了5%的人,不过我也很满意了。 本题楼主首先采用朴素的递归型动态规划,接着优化算法,使用借助HashMap存储临时数据的递归型动态规划,几次…

基于1-wire总线的多路温度监测系统

前言 在现代工业生产和环境监测中,温度是一个关键的参数,它直接影响到生产过程的稳定性和产品质量。为了确保温度控制在安全和有效的范围内,需要一种可靠且高效的多路温度监测系统。随着微电子技术和传感器技术的发展,基于1-Wire…

Redis key(BigKey、MoreKey)的存储策略

1. MoreKey 案例 1.1 大批量往 redis 里面 插入2000w 测试数据key (1) Linux Bash 下面执行&#xff0c;插入 100w rootspray:~# for((i1;i<100*10000;i)); do echo "set k$i v$i" >> /tmp/redisTest.txt; done; 查看 rootspray:~# more /tmp/redisTest.…

elementui单个输入框回车刷新整个页面

<!-- 搜索 --> <el-form :model"queryParams" ref"queryForm" :inline"true"><el-form-item label"名称" prop"nameLike"><el-input v-model"queryParams.nameLike" placeholder"请输入…

Arcgis Pro2.5安装教程(内含安装文件)

​最近处理的数据量大&#xff0c;发现arcmap这种老产品属实是不行了&#xff0c;相比于下一代的Arcgis Pro,不但运行速度慢&#xff0c;也容易遇到突然关闭的问题&#xff0c;之前基于团队的选择也没办法&#xff0c;最近实在是被数据搞得无语了&#xff0c;一鼓作气装上了Arc…

319_C++_使用QT自定义的对话框,既能选择文件也能选择文件夹,为什么使用QListView和QTreeView来达成目的?

解析 1: 在 Qt 中,QFileDialog::setOption 方法用于设置文件对话框的一些选项,以改变其行为或外观。QFileDialog::DontUseNativeDialog 是这些选项之一,当设置为 true 时,它会告诉 QFileDialog 不要使用操作系统提供的原生文件对话框,而是使用 Qt 自己实现的对话框样式。…

WAF攻防-漏洞发现协议代理池GobyAwvsXray

知识点 1、Http/s&Sock5协议 2、Awvs&Xray&Goby代理 3、Proxifier进程代理使用 4、Safedog&BT&Aliyun防护在漏洞发现中&#xff0c;WAF会对三个方向进行过滤拦截&#xff1a; 1、速度频率问题&#xff08;代理池解决&#xff09; 2、工具的指纹被识别&am…

MySQL查询重复数据获取最新数据

方法一&#xff1a; 1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘se_jck的博客-CSDN博客 这个错误是由于 MySQL 的新版本中默认开启了ONLY_FULL_GROUP_BY模式&#xff0c;即在 GROUP BY 语句中的 SELECT 列表中&…

UE5不打包启用像素流 ubuntu22.04

首先查找引擎中像素流的位置&#xff1a; zkzk-ubuntu2023:/media/zk/Data/Linux_Unreal_Engine_5.3.2$ sudo find ./ -name get_ps_servers.sh [sudo] zk 的密码&#xff1a; ./Engine/Plugins/Media/PixelStreaming/Resources/WebServers/get_ps_servers.sh然后在指定路径中…

标准版配置的新增和使用

很多用户在使用标准版进行二开的时候&#xff0c;都会遇见需要增加配置的问题 这篇文章就详细的介绍了&#xff0c;怎么增加配置以及配置的调用 一、增加配置 1. 增加配置分类 在菜单维护-开发配置-配置分类中&#xff0c;点击添加配置分类 父级分类&#xff1a;选择此分类的…

基于51单片机电子钟闹钟12/24小时制LCD显示( proteus仿真+程序+设计报告+讲解视频)

基于51单片机电子钟闹钟12/24小时制LCD显示 1. 主要功能&#xff1a;2. 讲解视频&#xff1a;3. 仿真设计4. 程序代码5. 设计报告6. 设计资料内容清单&&下载链接 基于51单片机电子钟闹钟12/24小时制LCD显示( proteus仿真程序设计报告讲解视频&#xff09; 仿真图proteu…

如何自动监控WordPress网站的运行状态

近来有不少Hostease的客户来咨询关于监控网站在线情况的方法&#xff0c;确实&#xff0c;尽管我们采取了各方面的措施来维护和保护WordPress网站&#xff0c;网站依然有可能由于一些不可控的原因关闭&#xff0c;这种情况往往事发突然&#xff0c;如果没有提前做好准备&#x…

评分卡制作过程中关键参数设定的思考

评分卡制作过程中关键参数设定的思考 评分卡、列线图和网络APP都是预测模型进入生产场景的形式。评分卡&#xff0c;常用于银行或金融机构的贷款审批过程中。其原理在于通过一系列与借款人相关的因素&#xff08;如年龄、收入、职业、信用记录等&#xff09;来为每个人打分&am…

一文速览Llama3:含8B和70B、长度8K、15T训练数据、组合PPO和DPO等方法

前言 4.19日凌晨正准备睡觉时&#xff0c;突然审稿项目组的文弱同学说&#xff1a;Meta发布Llama 3系列大语言模型了 一查&#xff0c;还真是 本文以大模型开发者的视角&#xff0c;帮你迅速梳理下LLama的关键特征&#xff0c;并对比上一个版本的LLama2&#xff0c;且本文后…

Python 字符串 Base64

因消息传输的需要&#xff0c;我们需要对大量文本的字符串进行一下 Base64 转换。 这样的好处是因为在传输的字符串中可能有存在一些特殊字符&#xff0c;这些特殊在经过网络传输的时候会出现编码的问题&#xff0c;并且会影响传输稳定性。 使用 Base64 可以避免这个问题。 方…

面试遇到的算法题

1.字符串转换整数 读入字符串并丢弃无用的前导空格检查下一个字符&#xff08;假设还未到字符末尾&#xff09;为正还是负号&#xff0c;读取该字符&#xff08;如果有&#xff09;。 确定最终结果是负数还是正数。 如果两者都不存在&#xff0c;则假定结果为正。读入下一个字…

GitOps 和 DevOps 有什么区别?

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab &#xff1a;https://gitlab.cn/install?channelcontent&utm_sourcecsdn 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署…

03 JavaScript学习:浏览器中执行 JavaScript

我比较习惯Chrome浏览器。 Chrome 是由 Google 开发的免费网页浏览器&#xff0c;调试代码非常方便。 Chrome 官网地址&#xff1a;https://www.google.com/intl/zh-CN/chrome/。 控制台输出 浏览器的控制台是开发者工具中的一个重要组成部分&#xff0c;它可以用来查看网页…