我有一个 .NET (3.5 w/Dev Studio 2008) 应用程序,它承载一个可视化 Active X(用 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);
在反射器的对象浏览器中查看方法时,.NET看到的是:
public virtual int License(string string1, string string2, int long1, string string3, string string4)
出于演示目的,我重命名了参数(老板对任何代码都感到紧张)。我留下了方法名称,因为它可能是相关的。
在该工作之前有方法调用。我只是看不出为什么我突然得到这个异常(exception)。 HRESULT 是 0x8002000e,快速搜索似乎表明这是一个通用的结果。
感谢大家的阅读。
编辑
多谢指点。知道别人感到困惑是一种安慰。奇怪的是,这确实有效。此行为在重建 Active X 后突然出现。没有界面或其他 IDL 更改。而且它在多台机器上,而不仅仅是一个开发箱或类似的机器。
编辑2
对于 S&G,我添加了一个新方法,
LONG CMyActive::XXXLicense(LPCTSTR string1, LPCTSTR string2, LONG long1, LPCTSTR string3, LPCTSTR string4);
重建所有内容,现在我可以调用新方法了……这闻起来像是编译器和/或 .NET 的 COM 互操作性层中的错误。
最佳答案
HRESULT 是 DISP_E_BADPARAMCOUNT
(比“0x8002000e”更适合谷歌搜索)。
似乎其他人也遇到过这个问题:
关于c# - ActiveX 的 .NET 使用者抛出 TargetParameterCountException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2789096/