从WPF应用程序打开VB6表单

时间:2009-03-16 07:13:11

标签: wpf vb6

我们目前正致力于将旧的VB6应用程序移植到WPF。第一阶段的计划是移植几个关键形式而不是所有应用程序。我们可以尝试在WPF应用程序中打开一些旧的VB6表单(作为模态表单),从而提供比第一阶段更强大的功能。

首先,我对你们朋友的问题就是这种憎恶:)甚至可能吗?可以从WPF应用程序打开VB6表单吗?

谢谢, Shahaf。

2 个答案:

答案 0 :(得分:0)

是的,这是可能的;取决于你愿意工作的努力程度。支持的关键方案如下(注意:还有其他支持的方案,但这些是方案):

  1. WPF - >的WinForms
  2. WinForms - > WPF
  3. 鉴于使用VB6,您的对象都是COM对象,您可以通过WinForms在WPF中托管它们。这是MSDN上的位置,我建议你开始:

    在WPF上还有一些非常好的书籍,涵盖与WPF(两个方向)的互操作,按此优先顺序排列:

    • WPF Unleashed(Adam Nathan)
    • 编程WPF(Chris Sells和Ian Griffiths)

    我希望这会有所帮助。

答案 1 :(得分:0)

您需要做的是将表单打包到ActiveX DLL中并公开可以设置初始值,调出表单并返回他们修改的值的类。

例如,在我自己的CAD / CAM应用程序中,我们有Forms,然后是一个层,它不包含修改模型的命令对象(实现命令设计模式的类),以及所有用VB6编写的模型。

某些命令调用VB6 Forms的对话框。有些很简单,有些很复杂。我们的转换项目的第一阶段是撕掉顶层表单层并用.NET等价物替换它。新的.NET表单引用了包含命令对象的活动DLL。

工作得很好。 .NET外观和VB6表单外观之间存在一些视觉差异,但除了命令对话框之外,它们就像在VB6可执行文件下一样运行。

需要注意的一点是,如果在此过程中继续修改原始ActiveX DLL,那么构建.NET程序会变得有点痛苦。与VB6不同,当涉及对引用的ActiveX库的较新版本的更新引用时,.NET不是自动的。解决方案很简单,您删除原始引用,然后添加新引用。