我需要后期绑定到一个第三方VB6 COM对象在3.5 C#应用程序(以避免我们当前版本的依赖)。这是由于一些,当我们试图通常使用它,导致错误的bug提供了大多数非后期绑定的方式是不是消耗品的DLL。目前,我们正在使用自定义VB6包装,使事情变得非常特定版本的,但是我发现我可以用后期绑定访问的属性和方法。现在,我想后期绑定事件,但一切我读过说,我需要从COM包装的接口继承来创建所需的事件接收器。 Here is one such article。
所以,我的问题是,是否有可能,而不必在编译时的任何参考DLL进行后期绑定事件处理?
UPDATE
以下是我与VB6包装(目前仍在积极更新)中的错误。
无法编译选定的项目错误加载类型库/ DLL。 TYPE_E_CANTLOADLIBRARY($ 80029C4A)
无法确定COM引用“3rdPartyDLL”的依赖。错误加载类型库/ DLL。 (从HRESULT异常:0x80029C4A(TYPE_E_CANTLOADLIBRARY))
该问题最有可能是由你所使用的平台引起的。我昨天刚做了一个类似的问题。请确保您在您的项目平台设置为86/64当你后期绑定的x86 / x64的COM类型库。
这同样适用于oleview
。使用的x86 / x64的版本,查看在x86 / x64类型库。 (也许你需要的,如果你是一个x64系统上,以获得正确executeable安装的Windows 64位SDK)。
从here:
我发现,当IDL包含导入库到其他项目的.tlb类型库的问题引起的。
这似乎创造一个DLL和其他之间的依赖关系。
如果相关的DLL缺少OLEVIEW拒绝显示相关的DLL,其中还通过不从C ++代码允许#进口表现。
因此,我会仔细看一下有问题的DLL的COM依赖关系,并确保它们都登记为好。
它也接着补充:
......因为这两个DLL是互相依赖的,组件从每个相互作用(通过在方法签名接口声明),并使用从
#import
彼此类型库。因此,除非这两个目标的DLL都存在,也不能重建。你可以想像,当你尝试完全重建项目的从无到有这将导致一个可怕的问题。
我已经尝试过的接口定义分成更小的IDL文件...
编辑:这里有一个最近这个问题来了解(我相信)的例子。我不得不出口到COM一个C#库。修改该库作了哪些改变几类的接口,但库GUID没有改变。此外see here about risks of AutoDual
这是在使用中。
这里的奇数部分 - VB6的DLL重建引用修改后的C#DLL。它编译罚款。没有错误。但它的类型库已损坏 - OLEVIEW无法打开它,用TYPE_E_CANTLOADLIBRARY
失败。更改C#DLL GUID是必要得到成功重新编译VB6 DLL。
显然VB6 / C#互操作的陷阱。