我有一个没有嵌入式类型库的VB6标准EXE。我想从该可执行文件生成一个互操作程序集,并从.NET项目中引用它。这应该允许我实例化.NET中可执行文件中定义的COM类。
由于我没有类型库,我尝试从头开始创建IDL,使用MIDL生成类型库,并从类型库生成互操作程序集。我可以从我的.NET项目中引用interop程序集,但仍然无法实例化任何COM类。我相信我的互操作程序集不知道EXE,因此无法实际执行我调用的代码。
我已经成功实例化了.NET中VB6 ActiveX DLL 中定义的COM类,其中互操作程序集知道包含该实现的相应COM DLL的ClassID。
在我从头开始创建的IDL中,我应该使用什么作为库定义的UUID?这应该以某种方式引用EXE吗?
[
uuid(WHATUUID-SHOU-LDII-NCLU-DEHEREXXXXXX),
version(1.0),
helpstring("for TLB on EXE")
]
library MyExe { ... }
答案 0 :(得分:2)
互操作库不应该知道EXE,这就是COM的工作原理。它是CLSID键,用于说明服务器应该如何启动。 InProcServer32与LocalServer32。
编写自己的IDL时,有一百万件事可能出错。如果你没有类型库,那么猜测接口和coclass的正确guid是非常重要的。如果你弄错了,那么就无法创建COM类。我很确定类型库是嵌入在vb6 ActiveX .exes中的,没有选项,我记得没有嵌入它。要验证,请使用Visual Studio的File + Open + File并选择.exe。您将获得嵌入式资源,如果您看到TYPELIB,您会很高兴。打开节点,右键单击ID 1并使用Export将其导出为.tlb文件。