gpt4 book ai didi

c# - 用 .NET 实现替换 C++ ActiveX 组件?

转载 作者:太空狗 更新时间:2023-10-30 01:11:14 24 4
gpt4 key购买 nike

我现有的托管和非托管软件使用第三方提供的 ActiveX 组件来执行某些通信,但现在需要通过我的应用程序路由此通信。

理想情况下,我能够安装一个 .NET 组件,它会公开完全相同的界面,并且可以用作直接替代品。

但是,我遇到了我对 COM 的理解的极限,诚然这是非常微不足道的。

  • 如何最好地确保我的接口(interface)实现与现有对象 100% 二进制兼容?

  • 如何确保应用程序使用我的接口(interface)实现而不是遗留实现?是否只是注册我的实现并取消注册遗留实现的问题?

  • 如何确保它是“直接”替代品,并且不需要对现有软件进行任何更改?

  • 如何确保非托管代码可以毫无问题地使用它?

注意:我可以要求使用 .NET 4.0,如果这样会使事情变得更简单的话。

编辑:赏金将移至此处How to debug why a VB6 application using my .NET ActiveX control does not register for events? 2 天后。

最佳答案

  1. 使用ActiveX组件的类型库。使用 Tlbimp.exe 导入它以获取互操作库,如果您自己使用此组件,您可能已经拥有它。通过继承该类型库中的接口(interface)来实现您自己的代码。

  2. 您的实现必须使用与 ActiveX 组件完全相同的 GUID 和 ProgID。使用 OleView.exe、File + View Typelib 并选择 ActiveX DLL 以查看 GUID。 ProgIDs 更难,最好的办法是在用 Regsvr32.exe 注册 ActiveX DLL 时观察注册表是如何用 SysInternals 的 ProcMon 实用程序修改的。最后,当您注册替代品时,Regasm.exe 需要进行完全相同的更改。

  3. 作为第 2 点。

  4. 同样,注册会获取非托管代码以使用您的代码。

为了使这项工作顺利进行,您真的必须知道接口(interface)的作用。如果 ActiveX 组件实际上是一个进程外服务器(一个 EXE),您就无法进行这项工作。

关于c# - 用 .NET 实现替换 C++ ActiveX 组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3043841/

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