C#运行时动态加载和调用DLL方法详解
在C#应用开发中,常常需要动态加载外部库(.DLL)以扩展功能。本文将详细讲解运行时加载DLL的步骤,并解决加载后无法直接调用方法的常见问题。
使用Assembly.LoadFile()加载DLL
Assembly.LoadFile()
方法用于将DLL加载到应用程序内存中,从而访问DLL中定义的类型和方法。例如:
<code class="language-csharp">var DLL = Assembly.LoadFile(@"C:\visual studio 2012\Projects\ConsoleApplication1\ConsoleApplication1\DLL.dll");</code>
此例中,DLL文件被加载到内存并赋值给名为'DLL'的变量。
从LoadFile()到方法调用
加载DLL后,下一步是创建目标类的实例并调用其方法。需要注意的是,C#需要在编译时知道方法的存在才能直接调用。如果类和方法在编译时未知,则必须采用其他方法。
使用反射调用方法
反射允许在运行时动态检查和操作程序集。使用反射调用方法的步骤如下:
GetExportedTypes()
方法获取DLL导出的类型数组。Activator.CreateInstance()
方法创建目标类的实例。InvokeMember()
方法调用实例上的目标方法。<code class="language-csharp">foreach(Type type in DLL.GetExportedTypes()) { var c = Activator.CreateInstance(type); type.InvokeMember("Output", BindingFlags.InvokeMethod, null, c, new object[] {@"Hello"}); }</code>
使用动态对象调用方法(仅限.NET 4.0及以上版本)
在.NET 4.0及以上版本中,可以使用动态对象动态调用实例上的方法,简化上述过程:
<code class="language-csharp">foreach(Type type in DLL.GetExportedTypes()) { dynamic c = Activator.CreateInstance(type); c.Output(@"Hello"); }</code>
通过以上任一方法,即可成功调用运行时加载的DLL中的方法,扩展C#应用程序的功能。
以上是如何在 C# 中运行时加载和调用 DLL 中的方法?的详细内容。更多信息请关注PHP中文网其他相关文章!