COMException: несоответствие типов при попытке доступа к методу COM - PullRequest
0 голосов
/ 18 августа 2010

Я попытался получить доступ к методу COM с помощью кода, подобного obj.Do("text"), в то время как Do - это метод в obj, который принимает ref string в качестве входных данных (obj - это объект .COM, написанный на VB6).Однако это всегда вызывает несовпадение типов COMException.Я попытался передать obj.Do(ref a), в то время как a является строковой переменной, но она тоже не сработала.

Код VB выглядит следующим образом

Function Generate(sDestinationFile As String)
    ....
Exit Function

Знаете ли вы, почему это происходит и как это следует делать?Я работаю над этим?

Ответы [ 2 ]

1 голос
/ 18 августа 2010

Как выглядят cls VB6?

Например, что-то вроде этого, похоже, работает как быстрый тест.

Я скомпилировал это как DLL ActiveX.

В C # я добавил ссылку на DLL и закодировал:

static void Main(string[] args)
{
    StringMe sm = new StringMe();
    object inVar = "world!";
    string returnVar = sm.AddString(ref inVar).ToString();
    System.Console.WriteLine(returnVar);
}
0 голосов
/ 20 августа 2010

С вашим компонентом VB6 убедитесь, что у вас есть справочная DLL двоичной совместимости, которую вы откладываете в сторону, чтобы при каждой компиляции он генерировал одинаковые DispID для dll, иначе Interop для проекта .Net не будет ссылаться на правильные методы .

Просто помните, что когда вы перекомпилируете свой компонент VB6 после добавления методов и т. Д., Вам нужно будет сгенерировать новое Interop для вашего .Net проекта.

Используйте параметры командной строки в tlbimp, чтобы убедиться, что у вас есть согласованное Interop, а не значение по умолчанию, которое было сгенерировано при выборе Добавить ссылку на компонент Com.

...