我有一个.NET组件,其生活在GAC。这是正确注册,以便它可以通过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.

任何想法??谢谢!

有帮助吗?

解决方案

COM具有在所有的方法重载没有支撑。当Regasm.exe生成类型库中的第二美孚()函数将被重新命名。您可以使用OLEView.exe这类工具来看看,如果FoxPro不能告诉你使用了什么名字。

做的最好的事情是完全避免这个问题,简单地给过载的另一个名字,所以你不必在它猜测。

其他提示

为什么退出那么快。

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

和这不是一个C#4.0功能。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top