Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
紧凑框架C#动态加载DLL_C#_Dll_Compact Framework - Fatal编程技术网

紧凑框架C#动态加载DLL

紧凑框架C#动态加载DLL,c#,dll,compact-framework,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_

我需要动态使用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类型中指定的数组。此外,我需要两个未知类型的变量(在运行时已知)在整个方法块中可见


请给我一些提示。

调用成员是正常的-但是您可以将结果强制转换到IList:

IList array = (IList) type.InvokeMember(...);
object firstElement = array[0];
(所有数组都实现了
IList
,在这种情况下使用它比
数组
稍微简单一些)

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

IFoo firstElement = (IFoo) array[0];

谢谢你的回复。所以,如果对象“array[0]”没有实现任何接口,那么就没有办法使用它的方法了?