Использование vb.net dll в неуправляемом проекте c ++ - PullRequest
1 голос
/ 05 января 2010

Я создал vb.net dll под названием "WSdll.dll". Я скомпилировал его, создал библиотеку типов (tlb) и зарегистрировал ее глобально (gacutil). Он включает в себя файл с именем wsutils.vb, который включает в себя пространство имен с именем "wsutils". В пространстве имен есть интерфейс (с атрибутом) под названием «IWSconnection» и класс под названием «WSconnection». Интерфейс и класс являются общедоступными, как и все методы и свойства.

Затем я попытался реализовать его в неуправляемом проекте c ++.

Я импортировал это: #import ".. \ WSdll \ WSdll \ bin \ Debug \ WSdll.tlb" \ raw_interfaces_only, \ named_guids, \ no_namespace

Затем попытался создать экземпляр: CComPtr pIWSconnection; pIWSconnection.CoCreateInstance (__uuidof (wsutils :: WSconnection));

Я получаю 2 ошибки a) wsutils не является именем класса или пространства имен b) необъявленный идентификатор wsconnection

Какие еще шаги я должен сделать, чтобы заставить dll работать здесь?

ТИА

Ответы [ 2 ]

1 голос
/ 06 января 2010

Имена пространств имен, используемые в вашем коде VB.NET, не видны COM-клиенту. Просто опустите префикс wsutils ::. Всякий раз, когда вы сомневаетесь, как выглядят имена #imported, откройте автоматически сгенерированные файлы .tlh и .tli в вашем редакторе.

1 голос
/ 05 января 2010

Вы помещаете no_namespace в строку #import - поэтому ваш объект находится не в пространстве имен wsutils, а в глобальном пространстве имен. Удалите пространство no_namespace из строки #import или wsutils :: из строки создания объекта.

...