“参数是不正确”错误调用.NET组件经由COM组件时
-
22-09-2019 - |
题
我有一个.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功能。
不隶属于 StackOverflow