c# - 基于CPU架构的dll后期绑定(bind)

标签 c# .net reflection late-binding

<分区>

我目前正在编写一个帮助程序库,它通过 Software Toolbox's TopServer 连接到车间 PLC .

TopServer 库针对 x86 和 x64 架构有不同的版本,我想根据调用代码的 CPU 架构使用后期绑定(bind)在运行时加载适当的版本。两个库中的方法具有相同的签名。

我可以使用下面的代码使用反射来加载相关对象,但我想知道在调用代码中使用此实例的最佳方法是什么。

public class LateBinding
{
    public static T GetInstance<T>(string dllPath, string fullyQualifiedClassName) where T : class
    {
        Assembly assembly = System.Reflection.Assembly.LoadFile(dllPath);
        Type t = assembly.GetType(fullyQualifiedClassName);

        return (T)Activator.CreateInstance(t);
    }
}

因为我是后期绑定(bind),所以我没有得到运行前的类型,所以我认为创建一个基于库方法签名的接口(interface)是实现这两个版本的好方法。

有没有人对这种方法有看法或对其他方法有推荐?

最佳答案

如果目标 DLL 仅因目标体系结构而异,并且程序集没有强命名,则不需要接口(interface)。

我的建议是分别将它们命名为 *_64.dll 和 *_86.dll,然后选择一个进行编译。

在运行时,您需要做的就是 System.Reflection.Assembly.LoadFile 正确的文件。

关于c# - 基于CPU架构的dll后期绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19979184/

相关文章:

c# - 下载文件时iframe onload

c# - Visual Studio 2005 的 Crystal 报表中未显示图像

c# - 手动使 C# 线程超时

c# - 为什么我的 C# Soap Extension 没有被调用?

c# - 将对象转换为 NameValueCollection

java - 是否可以使用Java反射打印出父类的属性?

java - 如何从私有(private)静态内部类访问变量

JavaScript 滚动元素在 Chrome 中有效,但在 IE11 中无效

c# - 循环地将字符串分割成锯齿状数组

c# - PHP 中 C# 转换为 char 的等效项是什么?