.NET客户端支持多版本的非托管DLL

时间:2011-03-28 13:24:18

标签: c# .net unmanaged dll

我正在开发一个.NET 4.0客户端,它将利用C库进行数据处理。用户将能够指定他们希望加载以进行处理的DLL文件。

我正在进行后期绑定/装配加载,如此处所述。 http://blogs.msdn.com/b/jonathanswift/archive/2006/10/03/dynamically-calling-an-unmanaged-dll-from-.net-_2800_c_23002900_.aspx

对于每个DLL,我的客户端中相同的方法调用序列将是相同的,但方法签名将更改或传入的数据结构将更改。根据DLL的版本和其他因素,填充结构的数据将有所不同。例如,MyStruct的定义将根据DLL的版本而改变。

public delegate int INTF_my_method(ref MyStruct pDataStruct);

这种方法建议采用哪些设计模式或设计决策?我需要根据用户指定的DLL版本加载适当的C方法委托和数据定义,并适当地填充结构。以前有人做过这样的事吗?

2 个答案:

答案 0 :(得分:1)

对于托管代码和本机代码,没有干净的方法。您可能做的最好的事情是声明一个尝试覆盖所有可能版本的接口类型,然后为每个单独的API版本编写具体的包装类。如果至少有一些常用功能,那么你可以在基类中进行铲除。

值得注意的是,您不能让用户选择DLL,您必须将DLL与具体的包装器类实例配对。

在您的计划中建立这种灵活性显然非常昂贵。

答案 1 :(得分:0)

您可以加载不同版本的DLL,但只能从单独的AppDomain加载。也就是说,对于要加载的每个DLL,您必须创建一个新的AppDomain。