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

3つのパラメーターバージョンの呼び出しは問題なく機能しますが、2つのパラメーターバージョンを呼び出すと、COMコンポーネントによって次のエラーが発生します。

OLE error code 0x80070057: The parameter is incorrect.

何か案は??ありがとうございました!

4

2 に答える 2

2

COMは、メソッドのオーバーロードをまったくサポートしていません。2番目のFoo()関数は、Regasm.exeがタイプライブラリを生成するときに名前が変更されます。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 に答える