3

我有一个存在于 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.

有任何想法吗??谢谢!

4

2 回答 2

2

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

最好的办法是完全避免这个问题,并简单地给重载另一个名字,这样你就不必猜测它了。

于 2010-02-23T16:38:06.893 回答
1

为什么这么快就放弃了。

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

这不是 C# 4.0 的功能。

于 2010-02-24T22:25:35.173 回答