我有一个OCX控件,有个方法定义如下public virtual void setLabel(short nIndex, string param);然后我在PPT中插入这个控件
代码如下
  shp = ActiveWindow.Selection..SlideRange.Shapes.AddOLEObject(252.25f, 120.62f, 379.)
   object clt = shp.OLEFormat.Object;
   object[] invokeArgs; invokeArgs = new object[] {(short)1, "Content" };
 clt.GetType().InvokeMember("setLabel",  System.Reflection.BindingFlags.InvokeMethod, null, clt, invokeArgs);
   
程序运行到最后一句提示:                    
                   
System.Object InvokeDispMethod(System.String, System.Reflection.BindingFlags, System.Object, System.Object[], Boolean[], Int32, System.String[]) Message:未知名称。 (异常来自 HRESULT:0x80020006 (DISP_E_UNKNOWNNAME)) Data:System.Collections.ListDictionaryInternal有人知道怎么解决吗?谢谢!

解决方案 »

  1.   

    好奇的问一下,你这个OCX控件是C#做的?
      

  2.   

    好奇的问一下,你这个OCX控件是C#做的?
      

  3.   

    好不到方法或参数个数不对public virtual void setLabel(short nIndex, string param);
    是虚方法么,有没有实现过啊http://forums.homeseer.com/showthread.php?t=131933
    这老外代码
    if (hs.ison ("A1"))
    hs.execx10 ("A1","off",0)
    else
    hs.execx10 ("A1","on",0)
    出错
    Exception from HRESULT: 0x80020006 (DISP_E_UNKNOWNNAME) 别人提议他改成
      if (hs.IsOn ("A1"))
        hs.ExecX10 ("A1","off",0,0,false);
      else
        hs.ExecX10 ("A1","on",0,0,false);
    都对了
    office版本不一样参数个数也会不一样
      

  4.   

    office版本不一样参数个数也会不一样是随便说一句,没有任何意义,与上下文无关+10
      

  5.   

    谢谢! OCX是用C++写的,在C#调用!方法肯定是实现的,如果单独在C#的form中调用没有任何问题,但用到反射就会出错!