0

我有一个 .exe 文件,里面有 COM 类——这些来自 C++,而不是 .netComVisible类型

我想在我的 .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"

任何人都知道如何,即使,我可以在 .net 项目中使用这些 COM 类?

4

1 回答 1

3

分发类型库有三种方法:单独在 .tlb 文件中,或作为 .dll 或 .exe 文件中的嵌入资源。但是,不强制分发带有 COM 组件的类型库文件。

通常在 HKCR\CLSID{CLSID} 下会有一个 TypeLib 注册表项,它有一个包含 typelib id 的默认值。(oleview.exe 对于跟踪这些注册表项非常有用)。如果您的注册表不包含 TypeLib 键,那么很可能您的组件没有随类型库一起分发。

tlbimp.exe 可以在 .dll 或 .exe 文件中导入任何嵌入式类型库资源,因此上面报告的错误向我表明,您的给定可执行文件中没有嵌入式类型库。您可以通过使用资源视图查看 exe 来确认这一点。我忘记了 Windows SDK 资源查看器的名称,但是你可以在这里找到一个免费的:MiTec Exe Explorer

如果 exe 没有 TYPELIB 资源,则无法创建 .net 互操作库。然后,您唯一的选择是联系组件的制造商并要求提供类型库。如果这不可能,您可以使用后期绑定来调用组件。

于 2009-08-11T13:30:17.950 回答