Compact Framework C#动态加载DLL

时间:2014-01-28 16:49:46

标签: c# dll compact-framework

而不是在我的项目中包含一个dll文件作为参考,我需要动态使用该dll文件中特定命名空间的一些类。

我已经对该主题做了一些研究,并通过使用Activator,InvokeMember等找到了解决方法。

但是,我在编写正确的代码时遇到了问题。我需要做类似的事情:

A a = new A();

B[] b = a.method();

B b0 = b[0];

其中A和B是动态加载的dll文件中来自命名空间的类的类型。

我正在尝试调整这段代码:

var DLL = Assembly.Load(path_to_dll);

//here variables to use later

foreach(Type type in DLL.GetTypes())
{
    //here checking if type is what I want and:
    var c = Activator.CreateInstance(type);
    type.InvokeMember("method", BindingFlags.InvokeMethod, null, c, null);
}

我不知道如何使用InvokeMember返回DLL类型中指定的数组。另外,我需要两个未知类型的变量(在运行时已知)在整个方法块中可见。

请给我一些提示。

1 个答案:

答案 0 :(得分:0)

正常调用该成员 - 但您可以将结果转换为IList

IList array = (IList) type.InvokeMember(...);
object firstElement = array[0];

(所有数组都实现IList,在这种情况下使用比Array稍微简单。)

您不能使用实际类型作为变量的类型,因为您在编译时并不知道它。如果您知道该类型将实现您可以访问的某个适当的接口,则可以使用:

IFoo firstElement = (IFoo) array[0];