Делаем сборку .NET COM видимой и работающей для VB5 - PullRequest
1 голос
/ 03 апреля 2010

У меня есть сборка, которую мне удалось сделать видимой для VB6, и она работает, но возникла проблема с выполнением той же задачи с VB5.

Для VB6 я собрал сборку, сделал ее видимой для COM, зарегистрировал ее как объект COM и т. Д., И сборка отображается в списке литературы VB6 и позволяет мне успешно использовать ее. Обозреватель объектов также показывает метод в сборке. Я скопировал сборку и ее TLB на виртуальную рабочую станцию, используемую для разработки VB5, и запустил Regasm, по-видимому, успешно:

C:\>C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727
\regasm arserviceinterface.dll /tlb:arserviceinterface.tlb
Microsoft (R) .NET Framework Assembly Registration Utility 2.0.50727.3053
Copyright (C) Microsoft Corporation 1998-2004.  All rights reserved.

Assembly exported to 'C:\Projects\AR\3rd Party\ARService\arserviceinterface.tlb'
, and the type library was registered successfully

Обратите внимание, что виртуальный W / S - это Win2k, на котором нет .NET Fx 3.5, просто 2.0.

Сборка отображается в списке ссылок, которые можно выбрать в VB5, но метод сборки не отображается в обозревателе объектов, и, как правило, его невозможно использовать. Либо есть шаг, который я бы не сделал, либо VB5 не знает, как использовать такой COM-объект. Обратите внимание, что установка VB5 находится на виртуальной рабочей станции, а не на той рабочей станции, на которой установлен VB6.

Есть идеи? Одна вещь, которая пришла мне в голову, это то, что мне может потребоваться создать и использовать строгое имя на данной рабочей станции, но ...

1 Ответ

4 голосов
/ 03 апреля 2010
  1. Убедитесь, что ваша сборка не собрана и не использует возможности .Net 3.5
  2. Скопируйте инструмент OLE / COM Object Viewer (вы можете получить его с компьютера с установленным Windows SDK). Запустите его, перейдите к View All Objects, прокрутите список вниз до вашего объекта и щелкните правой кнопкой мыши по нему, чтобы создать экземпляр.
    2.1 Если OLE / COM Object Viewer не может создать экземпляр, проблема заключается в том, как объект зарегистрирован на компьютере или как установлен .Net.
    2.2 Если OLE / COM Object Viewer может создать экземпляр, проблема в том, как VB5 потребляет.
  3. Я не могу вспомнить, действительно ли VB5 поддерживает раннее связывание (объекты на основе IUnknown) или поддерживает только позднее связывание (IDispatch). У меня есть подлое подозрение, что VB5 поддерживает только интерфейсы, и именно VB5.5 представил поддержку IUnknown. Так что это может быть вашей проблемой.
...