小李菜刀

沉迷于程序开发中....

博客园 首页 新随笔 联系 订阅 管理
  6 Posts :: 0 Stories :: 21 Comments :: 3 Trackbacks
看到鞠强兄的帖子Reflection中对于out类型的获取,觉得大家使用Reflection时忘记了一个非常强大的函数InvokeMember,而是先获取一个MethodInfo或PropertyInfo对象,然后再调用相应的方法。其实直接调用InvoeMember方法更简单、更高效、通用性更强。再加上我以前发的帖子通过反射调用COM对象 中的写的Variant包装类,解决这个问题就非常简单了。看来把Reflection的操作包装一下俺还是有先见之明的。
代码如下:
Using directives

namespace ConsoleApplication1
{
    
class Test
    
{
        
public void SetValue(string value1, out string value2)
        
{
            value2 
= "hello";
        }


        
public void SetValue(string value1)
        
{

        }


    }

    
class Program
    
{
        
static void Main(string[] args)
        
{
            Variant v 
= Variant.CreateInstance("ConsoleApplication1.Test");

            
object[] paras = new object[] "xxx"null };

            
object o = v.InvokeMethod("SetValue", paras);
            Console.WriteLine(paras[
1]);
        }

    }

}

posted on 2004-10-11 21:58 小李菜刀 阅读(1248) 评论(3) 编辑 收藏

Feedback

#1楼 2004-10-11 22:48 鞠强
哈哈,菜刀兄!!!十分感谢危机之中给偶的帮助!明天到公司后,验证一下您的代码。十分感谢帮助!!!
 回复 引用   

#2楼 2004-10-12 09:26 juqiang
呵呵,菜刀兄。你这段代码对于call .net的没有问题。但是如果call com组件,会提示“类型不匹配”的。
 回复 引用   

#3楼[楼主] 2004-10-12 10:21 小李菜刀      
应该不会的,因为包装一个Varint就是调用Com对象才写的。
把你的代码贴出来看看。

 回复 引用 查看