我负责的 .NET 应用程序使用第三方控件,该控件只能作为 32 位 COM 组件使用。一段时间以来,我一直在努力寻找让组件和应用程序在 64 位模式下协同工作的方法。我们从控件供应商那里得到了一些帮助——他们不打算很快提供 64 位版本的组件,但他们附加了一个使用 WebBrowser 控件加载组件的 C# 解决方案和一个使用一些有趣的 OLE 的 C++ 解决方案从 WebBrowser 中挖掘对控件界面的引用的代码。
好消息是代码做了它应该做的事情。该组件在 64 位解决方案中正确加载,我正在挖掘我对 ATL 的旧的、参差不齐的知识,以通过 C++ 解决方案来找出如何将控制接口检索到我们的 C# 中。
我担心的是,我对这种配置的理解还不够深入,无法确定我的应用程序可能面临哪些问题。有没有人做过这种性质的事情?我主要担心的是我们可能会开始看到神秘的崩溃,我最终会追溯到一个被 32 位控件破坏的值,我会马上回到我开始的地方。
供参考的控件是 Solidworks 的 EModelViewControl,它包含在 EDrawings 轻量级 CAD 查看器中。这不是一个特别复杂的控件,尽管它们的自动化设置有点有趣。