Ошибка «Параметр неверен» при вызове сборки .NET через COM-компонент - PullRequest
3 голосов
/ 23 февраля 2010

У меня есть сборка .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.

Есть идеи? Спасибо!

Ответы [ 2 ]

2 голосов
/ 23 февраля 2010

COM вообще не поддерживает перегрузки методов. Ваша вторая функция Foo () будет переименована, когда Regasm.exe создаст библиотеку типов. Вы можете использовать инструмент Oleview.exe, чтобы посмотреть на него, если Foxpro не может сказать вам, какое имя использовалось.

Лучшее, что можно сделать, это полностью избежать проблемы и просто дать перегрузке другое имя, чтобы вам не приходилось догадываться об этом.

1 голос
/ 25 февраля 2010

Почему так быстро.

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

И это не функция C # 4.0.

...