используя классы внутри COM exe из .Net - PullRequest
0 голосов
/ 11 августа 2009

У меня есть файл .exe, который мне дали, в котором есть классы COM - это из C ++, а не .net ComVisible types

Я бы хотел использовать эти классы внутри моего проекта .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;

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 Ответ

3 голосов
/ 11 августа 2009

Существует три способа распространения библиотеки типов: либо отдельно в файле .tlb, либо в виде встроенного ресурса внутри файла .dll или .exe. Однако не обязательно распространять файл библиотеки типов с компонентом COM.

Обычно под HKCR \ CLSID {CLSID} должен быть раздел реестра TypeLib, значение которого по умолчанию будет содержать идентификатор typelib. (oleview.exe очень полезен для отслеживания этих записей реестра). Если в вашем реестре нет ключа TypeLib, вероятно, ваш компонент не был распространен с библиотекой типов.

tlbimp.exe может импортировать любые встроенные ресурсы библиотеки типов внутри файлов .dll или .exe, поэтому ошибка, о которой сообщается выше, указывает мне, что в вашем данном исполняемом файле нет встроенной библиотеки типов. Вы можете подтвердить это, просмотрев исполняемый файл, используя просмотр ресурсов. Я забыл имя средства просмотра ресурсов Windows SDK, но вы можете найти бесплатное здесь: MiTec Exe Explorer

Если у исполняемого файла нет ресурса TYPELIB, вы не можете создать библиотеку взаимодействия .net. Единственный вариант - связаться с производителем компонента и запросить тип lib. Если это невозможно, вы можете использовать позднюю привязку для вызова компонента.

...