Как ссылаться на объекты и методы в файле COM .tlb в VB6? - PullRequest
2 голосов
/ 28 сентября 2010

Справочная информация: У нас есть COM-объект, написанный на C #. Мы работаем с другой компанией, код которой написан на VB6. Нам нужно отправить им код VB6, который создает и вызывает объекты / методы из нашего COM-объекта.

Я создал файл .tlb из C DLL-файла C #, используя RegAsm.exe, предоставленный Microsoft. Затем я добавил этот файл .tlb в качестве ссылки в VB6 (Project-> References-> Browse ...). Это также проверяется в разделе Доступные ссылки. Он не зарегистрирован как COM +.

Я использовал эту статью ( Пример C # / VB6 COM ) в качестве ссылки для всего этого.

Проблема: Проблема в том, что я ссылаюсь на этот COM-объект в моем проекте VB6, но ни одно из объектов / методов / пространств имен не отображается. Там должно быть что-то простое, что я скучаю, но что это? Нужно ли регистрировать это как COM +, или проблема в другом?

РЕДАКТИРОВАТЬ: Подробнее о проекте
Хорошо, теперь у меня есть доступ к исходному коду, но, видимо, я ошибся. Это в C ++, а не в C #. Наше тестовое приложение для COM-объекта C ++ было на C #, но сам COM-объект - C ++.

Теперь мой новый вопрос - как мне взаимодействовать с этой C ++ DLL. Мой колледж упомянул, что это «не настоящий COM-объект», так есть ли способ взаимодействовать с ним, кроме как добавить его в качестве ссылки? Если нет, то как мне превратить его в COM-объект?

Мне нужно получить доступ и использовать функции, а также объекты из этой DLL.

1 Ответ

2 голосов
/ 30 сентября 2010

Похоже, у вас нет подходящего интерфейса для вашего класса C # ... В C # для создания правильной библиотеки типов вам нужно создать интерфейс для вашего объекта. В противном случае объект появляется в VB6, как вы описали:

* 1003 Т.е. *

[Guid("0C3A05D1-ADF0-4d82-84BC-B59A1AEF6235")]
public interface ISomeClass
{
    [DispId(1)]
    string Foo { get; }

    [DispId(2)]
    string Bar { get; }

    [DispId(3)]
    bool Baz { get; }

}

[Guid("59EA6033-9BF3-4123-B163-9AD1F958E179"),
 ProgId("SomeModule.SomeClass"),
 ClassInterface(ClassInterfaceType.None)]
public class SomeClass : ISomeClass
{

     public string Foo 
     {
         get 
         {
             return _foo;
         }
     }
 // More implimentation
 ...

См. код проекта статьи для более подробной информации.

...