【发布时间】:2010-10-27 22:07:34
【问题描述】:
我正在开发一个包含多个用 VB6 编写的 dll 的应用程序。 VB6 代码包括 COM dll 和 ocx 控件。其余代码使用 C++ 和 C#。我被分配了使应用程序代码库与 64 位架构兼容的任务。大量的帮助材料可用于 C/C++ 代码,因此手头没有问题。但是要将所有这些 vb6 代码重写为 .net 或其他语言以使其与 64 位兼容并不容易。我也不了解所有底层逻辑,所以假设重写是不可能的。
另一方面,我们都知道 VB6 dll 不能在 64 位环境中工作。那么我的选择是什么。
1) 将每个 dll 转换为一个 EXE,该 EXE 将以 32 位加载,它可以通过 COM 接口与我的其余 64 位应用程序交互。您预见到这种方法有什么问题吗?
2) 我编辑注册表并将所有 VB6 dll 加载到进程外,让它们加载到 dllhost 中。
3) 制作一个 32 位 exe,在该 exe 中引用所有这些 VB6 dll 并将该 exe 加载到 32 位地址空间中,我的应用程序的 64 位部分与 32 位 exe 通信。
对于上述所有方法,我想到的主要问题是如何处理 OCX 控件????
有什么想法吗? 如果没有比上述哪一个更受您青睐的新想法,为什么?
【问题讨论】:
-
你知道如何使用 COM 在 64 到 32 之间进行通信吗?似乎仍然存在某种不匹配。
-
不,我还没有开始任何实验,但一旦我遇到任何成功或失败,就会更新。
-
这种通信通常应该可以顺利进行——尤其是当所有接口都是 oleautomation-compatibe 时,就像你的情况一样。