2013-09-08 6 views
2

У меня не было большого опыта работы с COM-интерфейсами, мне пришлось создать класс COM Visible, который содержит метод DoStuff, который будет возвращать по ссылке две переменные VB Variant, они на самом деле являются vb long и vb string, но объявлены как варианты.Вернуть вариант vb по ссылке из C# метода в C# COM Видимый класс

В настоящее время у меня есть что-то вроде:

public void DoStuff(string someString, int someInt, ref long refLong, ref string refString) 
{ 
    refLong = DesiredReturnLong; 
    refString = DesiredReturnString; 
} 

Я имею вопросы, как сценарий, который вызывает интерфейс COM ожидает VB варианты должны быть возвращены.

Как я мог это сделать? Я не думаю, что я могу просто возвращать объекты, как это (моя первоначальная мысль как тип VB Варианты были заменены на объекты в VB.NET

public void DoStuff(string someString, int someInt, ref object refLong, ref object refString) 
{ 
    ... 
} 

Что следует сигнатура метода выглядеть и что бы я должен делать возвращать правильные значения

Спасибо за любую помощь

+0

Да, это должен быть * объект *. –

ответ

2

варианты VB возвращать как объекты затем РезьбаКабель к нужному типу. Одно слово предупреждения при использовании типов VB 6 из com, я был пойман длинным, vb6 long - это a. net int! Так что хотя объект com имел длинные подписи, на самом деле это было 32-битное целое значение со знаком

2

Не стесняйтесь экспериментировать:?. RegAsm.exe /tlb сделать, чтобы создать файл .TLB, а затем использовать OleView.exe для его просмотра для подписи методы, как ваши:

public void DoStuff(string someString, int someInt, 
    ref object refLong, ref object refString) 

Вы должны видеть соответствующий метод интерфейса, как это:

HRESULT DoStuff([in] BSTR someString, [in] long someInt, 
    [in, out] VARIANT* refLong [in, out] VARIANT* refString)