Ошибка «Параметр неверен» при вызове сборки .NET через COM-компонент

StackOverflow https://stackoverflow.com/questions/2319632

Вопрос

У меня есть сборка .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 вообще не поддерживает перегрузки методов.Ваша вторая функция Foo() будет переименована, когда 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