- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我需要在 3.5 C# 应用程序中延迟绑定(bind)到第 3 方 VB6 COM 对象(以避免我们当前拥有的版本依赖性)。提供的 dll 在大多数非后期绑定(bind)方式中不可使用,因为当我们尝试正常使用它时会导致错误的一些错误。目前,我们正在使用一个自定义的 VB6 包装器,它使事情非常特定于版本,但是我发现我可以使用后期绑定(bind)来访问属性和方法。现在,我正在尝试后期绑定(bind)到事件,但是我读过的所有内容都说我需要从 COM 包装器的接口(interface)继承以创建所需的事件接收器。 Here is one such article .
所以,我的问题是是否可以在编译时不引用任何 dll 的情况下执行后期绑定(bind)事件处理?
更新
这是我在使用 VB6 包装器时遇到的错误(仍在积极更新)。
Could not decompile selected item Error loading type library/DLL. TYPE_E_CANTLOADLIBRARY ($80029C4A)
Could not determine the dependencies of the COM reference "3rdPartyDLL". Error loading type library/DLL. (Exception from HRESULT: 0x80029C4A (TYPE_E_CANTLOADLIBRARY))
最佳答案
来自 here :
I found that the problem is caused when the IDL contains an importlib to another project's .tlb typelib.
This seems to create a dependency between one dll and the other.
If dependant dll is missing OLEView refuses to display the dependent dll, which also manifests itself by not allowing #import from C++ code.
因此,我会仔细查看有问题的 DLL 的 COM 依赖项,并确保它们也都已注册。
它还继续添加:
...because both dlls are co-dependent, components from each interact (via interface declarations on method signatures) and use
#import
from each others typelib.Therefore, unless both target dlls are present, neither can be rebuilt. As you can imagine, this causes a terrible problem when you try to completely rebuild the project's from scratch.
I've experimented with separating the interface definitions into smaller IDL files...
编辑:这是最近发生的这个问题的一个例子(我相信)。我有一个导出到 COM 的 C# 库。对该库进行了修改,更改了几个类的接口(interface),但库 GUID 没有更改。还有 see here about risks of AutoDual
正在使用中。
这是奇怪的部分 - VB6 DLL 是引用修改后的 C# DLL 重建的。 它编译得很好。没有错误。但它的类型库已损坏 - OleView 无法打开它,失败并返回 TYPE_E_CANTLOADLIBRARY
。必须更改 C# DLL GUID 才能成功重新编译 VB6 DLL。
显然是 VB6/C# 互操作的一个陷阱。
关于c# - 如何在没有接口(interface)的情况下延迟绑定(bind) COM 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12810762/
我是一名优秀的程序员,十分优秀!