Используя классы внутри COM-exe из.Net
У меня есть файл.exe, который мне дали, в котором есть классы COM - это из C++, а не из.net ComVisible
типы
Я хотел бы использовать эти классы внутри моего проекта.net, но не могу добавить ссылку на exe; когда я пытаюсь получить
DIALOG BOX:
---------------------------
Microsoft Visual Studio
---------------------------
A reference to 'C:\Program Files\blah\blah.exe'
could not be added. Please make sure that the
file is accessible, and that it is a valid
assembly or COM component.
---------------------------
OK
---------------------------
tlbimp также не работает;
TLBIMP OUTPUT:
> tlbimp blah.exe
Microsoft (R) .NET Framework Type Library
to Assembly Converter 3.5.30729.1
Copyright (C) Microsoft Corporation. All rights reserved.
TlbIml : error TI0000 : The input file
'c:\program files\blah\blah.exe' is not
a valid type library
Но на самом деле все выглядит так, как будто доступны классы COM; в моем HKEY_CLASSES_ROOT
Улей я вижу записи для различных COM COMses;
REGISTRY ENTRY:
\HKEY_CLASSES_ROOT
\CLSID
\{456B14EA-4CCC-11D4-BB91-0020AFC894E9}
@="COM.Classname"
\InprocHandler32
@="ole32.dll"
\LocalServer32
"LocalServer32"=hex(7) ...
@="C:\\PROGRA~2\\blah\blah.exe"
\ProgID
@="COM.Classname"
Кто-нибудь получил представление о том, как, и даже если я могу использовать эти COM-классы из проекта.net?
1 ответ
Существует три способа распространения библиотеки типов: либо отдельно в файле.tlb, либо в виде встроенного ресурса внутри файла.dll или.exe. Однако не обязательно распространять файл библиотеки типов с COM-компонентом.
Обычно под HKCR\CLSID{CLSID} находится раздел реестра TypeLib, значение которого по умолчанию будет содержать идентификатор typelib. (oleview.exe очень полезен для отслеживания этих записей реестра). Если в вашем реестре нет ключа TypeLib, скорее всего, ваш компонент не был распространен с библиотекой типов.
tlbimp.exe может импортировать любые встроенные ресурсы библиотеки типов в файлы.dll или.exe, поэтому ошибка, о которой сообщается выше, указывает мне, что в вашем данном исполняемом файле нет библиотеки встроенных типов. Вы можете подтвердить это, просмотрев исполняемый файл, используя просмотр ресурсов. Я забыл имя средства просмотра ресурсов Windows SDK, но вы можете найти бесплатное здесь: MiTec Exe Explorer
Если у исполняемого файла нет ресурса TYPELIB, вы не можете создать библиотеку взаимодействия.net. Единственный вариант - связаться с производителем компонента и запросить тип lib. Если это невозможно, вы можете использовать позднюю привязку для вызова компонента.