通过COM组件调用.NET程序集时出现“参数不正确”错误

时间:2010-02-23 16:05:14

标签: .net com com-interop foxpro visual-foxpro

我有一个生活在GAC中的.NET程序集。它已正确注册,以便COM组件可以调用它。此.NET程序集包含方法和方法的重载:

public void Foo(string sValString, out string sOutString, string sOverloadString)
{
    if( sOverloadString == string.Empty )
        // do something
    else
        // do something else
}

public void Foo(string sValString, out string sOutString)
{
    Foo(sValString, out sOutString, string.Empty);
}

现在,我可以使用FoxPro来调用此程序集:

o = CREATEOBJECT("FooNamespace.FooClass")   
sValString = "blah"
sOutString = "blahblah"
o.Foo(sValString, @sOutString, "") *OK!
o.Foo(sValString, @sOutString)     *Generates error

调用三参数版本可以正常工作,但是两个参数版本在COM组件调用时会出现以下错误:

OLE error code 0x80070057: The parameter is incorrect.

任何想法?谢谢!

2 个答案:

答案 0 :(得分:2)

COM根本不支持方法重载。当Regasm.exe生成类型库时,将重命名您的第二个Foo()函数。如果Foxpro无法告诉您使用的名称,可以使用Oleview.exe工具查看它。

最好的办法是完全避免这个问题,只需给出重载另一个名字,这样你就不用猜它了。

答案 1 :(得分:1)

为什么退出这么快。

using System.Runtime.InteropServices;
...
public void Foo(string sValString, out string sOutString, [Optional] string sOverloadString)

这不是C#4.0功能。