我有一个生活在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.
任何想法?谢谢!
答案 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功能。