反射动态调用类方法的一个问题(返回参数 out)
相关代码如下:
public static object[] FindFunction(string methodName, object[] pr)
{
Assembly a = Assembly.LoadFrom(dllFilePath);//加载DLL
if (a == null)
{
throw new Exception( "Can 't Find The File ");
}
object o = a.CreateInstance( "namespace.class ");//寻找类
if (o == null)
{
throw new Exception( "Can 't Create The Object ");
}
MethodInfo m = o.GetType().GetMethod(methodName);//调用方法
if (m == null)
{
throw new Exception( "Can 't Find The Method of " + methodName);
}
return (object)m.Invoke(o, pr);//执行
}
以下是一个函数的原型:
public static int CheckUserCanLogin(object [] pr, out string UserName)
以下是调用:
FindFunction( "CheckUserCanLogin ", new object[] { pr, UserName });
问题是:
怎么获取最后一个返回参数的值.
------解决方案--------------------Invoke是支持ref/out调用参数的,问题是你的调用方法:
FindFunction( "CheckUserCanLogin ", new object[] { pr, UserName });
这时候UserName引用的一个copy被保留在new object[]数组里面,传递给CheckUserCanLogin。所以被改变的是这个在数组里面的饮用,不是UserName自己。
修改如下:
object[] params = new object[]{ pr, UserName };
FindFunction( "CheckUserCanLogin ", params);
UserName = params[1]; // <---- 保改变后得值copy回来