首页 > 后端开发 > C++ > 如何在 C# 控制台应用程序中访问动态加载的 DLL 中的方法?

如何在 C# 控制台应用程序中访问动态加载的 DLL 中的方法?

Barbara Streisand
发布: 2025-01-14 10:44:51
原创
548 人浏览过

How Can I Access Methods Within a Dynamically Loaded DLL in a C# Console Application?

在 C# 中动态加载 DLL

C# 允许在运行时动态加载和使用 DLL。Assembly.LoadFile() 方法允许将 DLL 加载到应用程序中。

问题:无法在控制台应用程序中使用已加载 DLL 的方法

用户报告能够加载 DLL,但无法访问其方法。这是因为 C# 编译器无法预先解析 DLL 中的类型和成员。要调用 DLL 中的方法,需要使用反射或动态对象。

解决方案 1:使用反射

反射允许在运行时获取类型元数据并调用其成员。使用反射需要显式调用方法:

<code class="language-csharp">// 加载 DLL
var assembly = Assembly.LoadFile(@"C:\visual studio 2012\Projects\ConsoleApplication1\ConsoleApplication1\DLL.dll");

// 遍历 DLL 中导出的类型
foreach (Type type in assembly.GetExportedTypes())
{
    // 创建类型实例
    var instance = Activator.CreateInstance(type);

    // 调用方法 (假设方法名为 "Output" 并接受一个字符串参数)
    type.InvokeMember("Output", BindingFlags.InvokeMethod, null, instance, new object[] { "Hello" });
}</code>
登录后复制

解决方案 2:使用动态对象 (.NET 4.0 及更高版本)

动态对象允许在代码中调用 DLL 方法,无需显式类型转换,语法更简洁:

<code class="language-csharp">// 加载 DLL
var assembly = Assembly.LoadFile(@"C:\visual studio 2012\Projects\ConsoleApplication1\ConsoleApplication1\DLL.dll");

// 遍历 DLL 中导出的类型
foreach (Type type in assembly.GetExportedTypes())
{
    // 创建动态实例
    dynamic instance = Activator.CreateInstance(type);

    // 调用方法 (假设方法名为 "Output" 并接受一个字符串参数)
    instance.Output("Hello");
}</code>
登录后复制

这两个解决方案都展示了如何动态访问 DLL 中的方法。选择哪种方法取决于你的 .NET 版本和个人偏好。反射提供了更精细的控制,而动态对象则简化了代码。 请注意,@"C:visual studio 2012ProjectsConsoleApplication1ConsoleApplication1DLL.dll" 需要替换为你的 DLL 的实际路径。

以上是如何在 C# 控制台应用程序中访问动态加载的 DLL 中的方法?的详细内容。更多信息请关注PHP中文网其他相关文章!

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