您的位置:程序门 -> .net技术 -> c#



反射动态调用类方法的一个问题(返回参数 out)


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


反射动态调用类方法的一个问题(返回参数 out)[已结贴,结贴人:meqizhi]
发表于:2007-02-07 16:20:55 楼主
相关代码如下:
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   });

问题是:
怎么获取最后一个返回参数的值.
发表于:2007-02-07 16:30:561楼 得分:0

object[]   pr   =   new   object[]{...};
string   username;
object[]   parms   =   new   object[]{pr,username};

findfunction( "checkusercanlogin ",   parms);
发表于:2007-02-07 16:54:342楼 得分:0
对:
object[]   pr   =   new   object[]{...};
string   username;
object[]   parms   =   new   object[]{pr,username};

findfunction( "checkusercanlogin ",   parms);
发表于:2007-02-07 19:56:583楼 得分:0
呵呵,两位大侠看仔细我的调用和你们说的有什么区别先
findfunction( "checkusercanlogin ",   new   object[]   {   pr,   username   });
findfunction( "checkusercanlogin ",   parms);
呵呵,现在问题是返回的username   根本就没有改变
发表于:2007-02-07 20:24:534楼 得分:0
路过   只能顶
发表于:2007-02-08 00:02:345楼 得分:50
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回来
发表于:2007-02-08 00:37:396楼 得分:0
遇到过此问题,qqchen79(知秋一叶)   说的对,可以解决,回调回来的参数数组【1】,就是你要的值


快速检索

最新资讯
热门点击