gpt4 book ai didi

c# - 如何在没有接口(interface)的情况下延迟绑定(bind) COM 事件

转载 作者:太空狗 更新时间:2023-10-29 23:52:06 24 4
gpt4 key购买 nike

我需要在 3.5 C# 应用程序中延迟绑定(bind)到第 3 方 VB6 COM 对象(以避免我们当前拥有的版本依赖性)。提供的 dll 在大多数非后期绑定(bind)方式中不可使用,因为当我们尝试正常使用它时会导致错误的一些错误。目前,我们正在使用一个自定义的 VB6 包装器,它使事情非常特定于版本,但是我发现我可以使用后期绑定(bind)来访问属性和方法。现在,我正在尝试后期绑定(bind)到事件,但是我读过的所有内容都说我需要从 COM 包装器的接口(interface)继承以创建所需的事件接收器。 Here is one such article .

所以,我的问题是是否可以在编译时不引用任何 dll 的情况下执行后期绑定(bind)事件处理?

更新

这是我在使用 VB6 包装器时遇到的错误(仍在积极更新)。

  • 在 OleViewer 中,我得到

Could not decompile selected item Error loading type library/DLL. TYPE_E_CANTLOADLIBRARY ($80029C4A)

  • 在 Visual Studio 中我得到:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com