从.net项目中引用无typelib的COM EXE

本文关键字:typelib COM EXE 引用 net 项目 | 更新日期: 2023-09-27 18:05:02

我有一个没有嵌入式类型库的VB6标准EXE。我想从可执行文件生成一个互操作程序集,并从。net项目引用它。这应该允许我实例化。net中可执行文件中定义的COM类。

由于我没有类型库,我尝试从头创建IDL,使用MIDL生成typelib,并从typelib生成互操作程序集。我可以从我的。net项目中引用互操作程序集,但仍然不能实例化任何COM类。我相信我的互操作程序集不知道EXE,因此不能实际执行我调用的代码。

我已经成功地从。net实例化了在VB6 ActiveX dll 中定义的COM类,其中互操作程序集知道包含实现的相应COM dll的分类。

在我从头创建的IDL中,我应该使用什么作为库定义的UUID ?这应该以某种方式指EXE吗?

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

这些问题很接近,但我仍然卡住了。我想做的事有可能吗?我宁愿避免延迟绑定。谢谢你的帮助。

从.net项目中引用无typelib的COM EXE

互操作库不应该知道EXE,这就是COM的工作方式。CLSID键告诉我们服务器应该如何启动。InProcServer32 vs LocalServer32.

当您编写自己的IDL时,有无数的事情可能出错。如果没有类型库,猜测接口和类的适当指南是非常重要的。如果你弄错了,那么你就不能创建COM类。我很确定类型库是嵌入在vb6 ActiveX .exe,没有选项,我记得不嵌入它。要进行验证,请使用Visual Studio的File + Open + File并选择.exe。你会得到嵌入的资源,如果你看到TYPELIB你会很高兴。打开节点,右键单击ID 1并使用Export将其导出为.tlb文件。