ref和指针不是object,甚至不能box,所以不行了。
前些时候我也很为这个问题急了一把,这里是我的发现:
使用这个InvokeMember的overload版本:
[C#]
public abstract object InvokeMember(
   string name,
   BindingFlags invokeAttr,
   Binder binder,
   object target,
   object[] args,
   ParameterModifier[] modifiers,
   CultureInfo culture,
   string[] namedParameters
);ParameterModifier pmod = new ParameterModifier(1);
pmod[0] = false; //in
pmod[1] = true;  //out
t.InvokeMember(funname, BindingFlags.InvokeMethod, null, obj, args,
    new ParameterModifer[] {pmod}, null, null);
//args数组中仍然放一个string对象。MSDN上对ParameterModifier语言不详,还是自己多试试看吧。

解决方案 »

  1.   

    对了,我想问你一个问题,怎么才能在C#中定义指针呢,还有上面我要得到返回值时好象只能通过args[0].ToString()调用,而不能通过a调用,为什么呢?马上给分
      

  2.   

    我好象
    HRESULT getname([in] BSTR name);
    HRESULT getname([out] BSTR* name);
    上面对于下两个发法都没问题,但对于下面的方法就不能调用了,不止为什么?
    HRESULT getname([out, retval] BSTR* name); objType.InvokeMember(funname, 
    BindingFlags.InvokeMethod,
    null,
    obj,
    args,
    new ParameterModifier[] {pmod},
    null,
    null);
    这种方法不行:
    报错System.Reflection.TargetInvocationException: 调用的目标发生了异常。 ---> System
    Reflection.TargetParameterCountException: 无效索引。
       --- 内部异常堆栈跟踪的结尾 ---
       at System.RuntimeType.InvokeDispMethod(String name, BindingFlags invokeAttr,
    Object target, Object[] args, Boolean[] byrefModifiers, Int32 culture, String[]
    namedParameters)
       at System.RuntimeType.InvokeMember(String name, BindingFlags invokeAttr, Bin
    er binder, Object target, Object[] args, ParameterModifier[] modifiers, Culture
    nfo culture, String[] namedParameters)
       at server.startthread()
      

  3.   

    既然是[retval],那么就不是通过参数传递的了,
    不要参数,接InvokeMember的返回值看看。