首页 > 后端开发 > C++ > 如何在 C# 中运行时加载和调用 DLL 中的方法?

如何在 C# 中运行时加载和调用 DLL 中的方法?

Patricia Arquette
发布: 2025-01-14 10:00:00
原创
432 人浏览过

How Can I Load and Invoke Methods from DLLs at Runtime in C#?

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#需要在编译时知道方法的存在才能直接调用。如果类和方法在编译时未知,则必须采用其他方法。

使用反射调用方法

反射允许在运行时动态检查和操作程序集。使用反射调用方法的步骤如下:

  1. 获取类型: 使用GetExportedTypes()方法获取DLL导出的类型数组。
  2. 创建实例: 使用Activator.CreateInstance()方法创建目标类的实例。
  3. 调用方法: 使用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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板