如何将ActiveX网格控件(VB6)重新编译为64位OCX?

4

我们自2000年以来一直在开发ActiveX网格控件,并且拥有很多满意的客户。该控件仍得到支持,但我们和客户最近面临的主要问题是64位版本的MS Office VBA中广泛使用的网格控件。问题在于我们的OCX是32位的,因为它是用Visual Basic 6开发/编译的,原始形式无法生成64位代码。

问题是:是否有办法将现有的VB6项目重新编译为64位ActiveX控件?是否可以使用VB6 IDE的插件或修改,或者像命令行编译器这样的其他工具来完成?也许是另一个可以生产64位代码的开发环境,如RealBasic?

当然,我们知道源代码(主要是API调用)也应进行更新,但在这个问题中,我们询问的是从VB6源代码创建64位可执行OCX的一般可能性。

请随时发布有关该问题的任何想法,即使是在发布后几个月。


3
那是不可能的。要么就退出使用它,要么就转换到其他语言,比如VB.NET。 - Hans Passant
1
@HansPassant,我们已经有了类似的WinForms网格控件,但我们需要完全针对ActiveX进行操作。 - TecMan
迁移代码到 VB.NET,并使用 COM Interop 以保持与现有客户端的兼容性。 - R.J. Dunnill
2个回答

1
很抱歉,使用VB6无法创建64位控件。
一种解决方法可能是在VB.NET中创建一个64位用户控件,然后使用Interop将32位控件嵌入其中,但这是一种糟糕的解决方案,不值得花费精力。

我已经使用COM互操作为我们的WinForms网格创建了一个ActiveX包装器。这确实是一项繁琐的工作,因为您需要编写代码来包装每个方法、属性和事件。此外,并非所有数据类型都可以在COM和.NET世界之间“原样”传递。但是您的想法作为一般概念非常好-从未考虑过,谢谢。只有一个问题:我们真的可以在64位版本的MS Office中使用ActiveX包装器来注册regasm的.NET程序集吗? - TecMan
你“应该”能够做到。实际上我没有尝试过,因为老实说,重写成VB.NET比花费大量时间和精力绕路而行更好。我的建议肯定是要重写,而不是包装。 - Robin

0
这个问题的唯一希望和可能的解决方案是RAD Basic项目。Carles Royan领导的开发团队正在尽力为我们提供在64位平台上编译ActiveX的能力。也许,我们将在2021年下半年看到RAD Basic的alpha版本能够做到这一点。如果这种情况发生,我会更新这个答案。

我建议将代码迁移到VB.NET并使用COM互操作。这对我们很有效。 - R.J. Dunnill

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接