方式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博客