【发布时间】:2009-03-16 07:13:11
【问题描述】:
我们目前正致力于将旧的 VB6 应用程序移植到 WPF。第一阶段的计划是移植几个关键表单,而不是所有应用程序。有人提出,我们可能会尝试从 WPF 应用程序中打开一些旧的 VB6 表单(作为模式表单),从而提供比第一阶段更强大的功能。
我想问你们朋友们,首先,这种可憎的事情:) 可能吗?可以从 WPF 应用程序打开 VB6 表单吗?
谢谢, 沙哈夫。
【问题讨论】:
我们目前正致力于将旧的 VB6 应用程序移植到 WPF。第一阶段的计划是移植几个关键表单,而不是所有应用程序。有人提出,我们可能会尝试从 WPF 应用程序中打开一些旧的 VB6 表单(作为模式表单),从而提供比第一阶段更强大的功能。
我想问你们朋友们,首先,这种可憎的事情:) 可能吗?可以从 WPF 应用程序打开 VB6 表单吗?
谢谢, 沙哈夫。
【问题讨论】:
您需要做的是将表单打包到 ActiveX DLL 中,并公开可以设置初始值、显示表单并返回它们修改的任何值的类。
例如,在我自己的 CAD/CAM 应用程序中,我们有表单,然后是一个不包含修改模型的命令对象(实现命令设计模式的类)的层,以及全部用 VB6 编写的模型。
一些命令调用 VB6 窗体的对话框。有些很简单,有些很复杂。我们转换项目的第一阶段是撕掉顶层表单层并将其替换为 .NET 等效项。新的 .NET 表单引用了包含命令对象的活动 DLL。
效果很好。 .NET 外观与 VB6 表单外观之间存在一些视觉差异,但除了命令对话框的运行方式与在 VB6 可执行文件下的运行方式相同。
需要注意的一点是,如果您在此过程中继续修改原始 ActiveX DLL,那么构建 .NET 程序会变得有点痛苦。与 VB6 不同,.NET 在更新对引用的 ActiveX 库的较新版本的引用时并不那么自动。解决方案很简单,删除原始引用,然后添加新引用。
【讨论】:
是的,这是可能的;取决于你愿意工作的努力程度。支持的关键场景如下(注意:还有其他支持的场景,但这些是关键):
鉴于在 VB6 中您的对象都是 COM 对象,您可以通过 WinForms 在 WPF 中托管它们。这是 MSDN 上我建议您开始的位置:
还有几本关于 WPF 的非常好的书籍涵盖了与 WPF 的互操作(两个方向),按关于这个主题的优先顺序排列:
我希望这会有所帮助。
【讨论】: