Ссылка typelib-COM COM из проекта .NET - PullRequest
1 голос
/ 10 августа 2011

У меня есть VB6 Standard EXE без встроенной библиотеки типов. Я хотел бы сгенерировать сборку взаимодействия из этого исполняемого файла и ссылаться на него из проекта .NET. Это должно позволить мне создавать экземпляры COM-классов, определенных в исполняемом файле из .NET.

Поскольку у меня нет библиотеки типов, я попытался создать IDL с нуля, использовал MIDL для создания библиотеки типов и сгенерировал сборку взаимодействия из библиотеки типов. Я могу сослаться на сборку взаимодействия из моего проекта .NET, но все еще не могу создать экземпляр COM-классов. Я полагаю, что моя сборка взаимодействия не знает об EXE-файле и поэтому не может выполнить код, который я вызываю.

Я уже успешно создал экземпляры COM-классов, определенных в VB6 ActiveX DLL из .NET, где сборки взаимодействия знают ClassID соответствующих COM DLL, содержащих реализацию.

В IDL, который я создаю с нуля, что я должен использовать в качестве UUID для определения библиотеки? Должно ли это как-то относиться к EXE?

[
    uuid(WHATUUID-SHOU-LDII-NCLU-DEHEREXXXXXX),
    version(1.0),
    helpstring("for TLB on EXE")
]
library MyExe { ... }

Эти вопросы близки, но я все еще застрял. Возможно ли то, что я пытаюсь сделать? Я бы предпочел избежать позднего связывания. Спасибо за любую помощь.

1 Ответ

2 голосов
/ 11 августа 2011

Библиотека взаимодействия не должна знать об EXE, так работает COM.Это ключ CLSID, который сообщает, как должен запускаться сервер.InProcServer32 против LocalServer32.

Есть миллионы вещей, которые могут пойти не так, когда вы пишете свой собственный IDL.Угадайте правильные направляющие для интерфейсов и коклассов нетривиально, если у вас нет библиотеки типов.Если вы ошиблись, вы не сможете создать класс COM.Я почти уверен, что библиотека типов встроена в vb6 ActiveX .exes, и я не помню, чтобы я ее вставил.Для проверки используйте Visual Studio File + Open + File и выберите .exe.Вы получите встроенные ресурсы, вы будете рады, если увидите TYPELIB.Откройте узел, щелкните правой кнопкой мыши идентификатор 1 и используйте Экспорт, чтобы экспортировать его в файл .tlb.

...