Используя классы внутри 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. Если это невозможно, вы можете использовать позднюю привязку для вызова компонента.

Другие вопросы по тегам