代码之家  ›  专栏  ›  技术社区  ›  DevSolo

ActiveX的.NET使用者引发TargetParameterCountException

  •  2
  • DevSolo  · 技术社区  · 16 年前

    我有一个.NET(3.5 W/DEV Studio 2008)应用程序,它拥有一个Visual ActiveX(用C++ W/DEV Studio 2003编写)。可以访问所有源,但不能轻松地将Active X控件移动到2008年。

    这在过去很管用。对Active X控件进行了一些更改,现在,在Active X上调用一个方法时,我100%的时间都在获取TargetParameterCountException。Active X方法的签名是:

    LONG CMyActive::License(LPCTSTR string1, LPCTSTR string2, LONG long1, LPCTSTR string3, LPCTSTR string4);
    

    在Reflector的对象浏览器中查看方法时,.NET将其视为:

    public virtual int License(string string1, string string2, int long1, string string3, string string4)
    

    为了演示的目的,我重新命名了参数(boss对任何代码都很紧张)。我留下了方法名,因为它可能是相关的。

    在该工作之前有方法调用。我只是不明白为什么我突然得到这个例外。hresult是0x8002000e,快速搜索似乎表明这是一个常规搜索。

    感谢大家的阅读。

    编辑

    谢谢你的指点。知道别人是困惑的,这是一种安慰。奇怪的是,这确实有效。此行为在重新生成活动X后出现。没有接口或其他IDL更改。它在多台机器上,而不仅仅局限于一个开发箱之类的。

    编辑2

    对于S&G,我添加了一个新方法,

    LONG CMyActive::XXXLicense(LPCTSTR string1, LPCTSTR string2, LONG long1, LPCTSTR string3, LPCTSTR string4);
    

    重建了所有东西,现在我可以调用新方法…这在编译器和/或.NET的COM互操作性层中闻起来像一个bug。

    1 回复  |  直到 16 年前
        1
  •  1
  •   MusiGenesis    16 年前

    hresult是 DISP_E_BADPARAMCOUNT (比“0x8002000e”更适合谷歌搜索)。

    似乎其他人碰到了这个问题:

    http://www.codeguru.com/forum/showthread.php?t=96353

    http://forums.devx.com/showthread.php?t=85215