相关代码如下:
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 });问题是:
怎么获取最后一个返回参数的值.

解决方案 »

  1.   


    object[] pr = new object[]{...};
    string username;
    object[] parms = new object[]{pr,username};FindFunction("CheckUserCanLogin", parms);
      

  2.   

    对:
    object[] pr = new object[]{...};
    string username;
    object[] parms = new object[]{pr,username};FindFunction("CheckUserCanLogin", parms);
      

  3.   

    呵呵,两位大侠看仔细我的调用和你们说的有什么区别先
    FindFunction("CheckUserCanLogin", new object[] { pr, UserName });
    FindFunction("CheckUserCanLogin", parms);
    呵呵,现在问题是返回的UserName 根本就没有改变
      

  4.   

    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回来
      

  5.   

    遇到过此问题,qqchen79(知秋一叶) 说的对,可以解决,回调回来的参数数组【1】,就是你要的值