混合VB6 / .Net应用程序在现实世界中如何运行?


11

我正在维护VB6应用程序,我们正在研究如何迁移到.Net。我们正在考虑通过在COM可见.Net类中实现新功能并缓慢迁移现有功能来逐步进行此操作。我找到了一些有关如何做到这一点的有启发性的“ Hello World”示例,它在我们的App中运行良好。但是这些混合应用程序的实际行为如何?它们稳定,可维护吗?我们程序的特别之处在于,同一计算机上的更多用户将通过切换用户帐户来使用它。

编辑:VB6应用程序从USB连接读取数据并将其存储在Access数据库中。用户可以调用数据的各种视图。数据缓存在硬件设备中,因此读取数据时不会造成致命影响。

编辑2015年10月4日:后续行动:我们仍在逐步将现有VB6代码替换为.Net的过程中。首先,我们采用了数据访问例程,然后将业务逻辑以及当前的一种逻辑转换为WPF。我们确实确实重写了我们转换的每段代码(在VB.Net中),但是我们可以这样做很慢,同时可以改善功能。混合应用程序在过渡到Windows 8、8.1和10后仍然幸免于难。

编辑2018年3月9日:我们将在下个月发布完全转换的代码。混合应用程序将至少支持一年。它主要在高分辨率屏幕上显示问题,但在其他情况下则可以正常工作。坦白地说,由于VB6代码库存在兼容性问题,因此.Net Framework安装和依赖项安装(其中包括SQL Server LocalDb)损坏导致的支持头痛更多。


1
“旧版”应用程序有什么作用?一些更多的细节将有助于回答您的问题。
2011年

没有“ USB连接”,就没有“ PCI连接”。您更有可能将某些设备连接到USB总线,并且设备类型很重要。
Bob77,2013年

Answers:


5

通过COM接口将.NET暴露于VB6方面,我取得了惊人的成功。通过这样做,我们能够最初重构出大量的VB6代码并设置到.NET的升级路径。请记住,惯用的VB6不能很好地转换为C#甚至VB.NET,因此您需要谨慎行事。

我们遇到的一个令人烦恼的问题是,由于对公共COM接口的更改,我们不得不进行大量的重建。Visual Make缓解了这种情况。


谢谢。您能否解释一下Visual Make解决的问题。我不确定我是否理解。
Dabblernl 2011年

@Dabblernl-Visual Make允许您创建一个项目,该项目是VB6项目的集合,并且将按适当的顺序构建它们。
2011年

6

FWIW,根据我的经验,需要将VB6应用程序升级到.Net,这是重写的理想借口。除非最初的编码人员是聪明的有远见卓识的人,否则VB6中盛行的技术很少会干净地移植到.Net。

您会遇到的一些乐趣:

  1. 最后,您将获得真正不需要的对Microsoft.VisualBasic的引用。
  2. 它们将是难以发现的错误,例如,VB6子字符串(a,b,c)安静地呈现为a.SubString(b,c)并在您的脸上炸毁,因为它在VB6和在.Net中从0开始。
  3. 所有这些易于编码的隐式转换都将来自木制品,通常是在第一台没有“,”作为列表定界符和/或“”的PC上。作为小数点分隔符。
  4. 您转换后的类将没有重新设计应带来的理想数据隐藏。

高温超导


1
您提出了一些非常好的观点。这些是必须首先通过代码来重构不良做法的一些原因。理想情况下,您将确保Option Explicit已打开并且消除了对魔术隐式转换的所有依赖。
2011年

感谢您为我加油;-)但这不是我现在想知道的。真正的转换梦night仍将到来。
Dabblernl

1
@chaos对。实际上,我是从Explicit开始的,当没有错误时,我将其归结为Strict,这将有效地突出显示许多问题
smirkingman

1
我听说有一些团队使用火焰喷射器追随VB6代码。我相信对于VB6代码而言,发生这种情况的原因更多是因为许多VB“开发人员”在开始时就没有编程经验。这反过来在野外创建了许多设计和编码不当的应用程序,以供新一代专业人士使用。
它发出咕

1

它对您来说应该可以正常工作,没有什么特别的关于快速用户切换/多个会话的问题。

在可维护性方面,请记住,混合VB6 / VB.NET只能是一个临时解决方案:您的计划应该是随着时间的推移完全迁移到VB.NET。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.