希望有人可以在这里帮助我。基本上我必须动态加载 2 个程序集,例如
ObjA= Assembly.LoadFrom(folder + module); //had the main methods of the integration
ObjB = Assembly.LoadFrom(folder + module_decl); //has more interface declarations for the intigration
现在ObjB
有一个方法的返回值声明objA
。因此,我首先尝试找到这个返回值并创建一个类型,例如
Type intObj ;
Type[] type2 = objB.GetTypes();
foreach (Type t in type2)
{
if ((intObj == null) && (t.FullName == "IIReturnInterfaceDecl"))
{
intObj = t;
}
}
然后我去创建一个主类的实例并调用该方法
foreach (Type t in types)
{
mi = t.GetMethod("CreateTheObjectMethod");
if (mi != null)
{
string typeName = t.FullName;
object lateBoundObj = null;
lateBoundObj = Activator.CreateInstance(t);
intObj = lateBoundObj.GetType().InvokeMember("CreateTheObjectMethod",
//BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Instance,
BindingFlags.InvokeMethod | BindingFlags.GetProperty,
null,
lateBoundObj,
args);
if (intObj == null)
{
MessageBox.Show("oops");
}
else
{
MessageBox.Show("done");
}
//
// break;
}
//result
}
}
else
{
MessageBox.Show("DAMMIT");
}
但基本上我不能让它调用方法并以我想要的方式返回对象,(上面的代码没有编译给出错误
错误 1 无法将类型“object”隐式转换为“System.Type”。存在显式转换(您是否缺少演员表?)“)
但我不知道如何让它转换为正确的类型。
请注意,我加载的外部程序集是第 3 方,我没有它们的标题或声明,我可以访问它们,但我没有声明的接口或类可以轻松转换,我必须动态进行。
将非常感谢任何指导。我已经查看和搜索了很多,并在“委托”上看到了很多,但我看到的最多的是进行调用和传递值,而不是处理返回和使用的动态用户类型值。
谢谢你的帮助。
//已编辑:if语句中有错误,对于那些已经响应的人感到抱歉,一定是:if(intObj == null)而不是if(CreateTheObjectMethod == null)
这可能会有所帮助,这基本上是我正在调用的方法的声明
[System.Reflection.RuntimeMethodInfo] = {IIReturnInterfaceDecl CreateTheObjectMethod(System.String, System.String)}