将VB6应用程序移植到VB.Net:任何人都可以投票多少努力?

在2002年,我为客户做了一个相当大的VB6应用程序.它使用了很多UserControls和第三方菜单控件(用于将图标放在菜单名称旁边).它具有动态“可拆分”面板,具有多状态复选框的TreeView等.一个非常丰富的UI.我在这个项目上的总时间是大约500个小时,客户慷慨地让我分散一个多月. (是的,这是那样的工作)他们很高兴,但是他们按时付款,没有任何论据.

所以在与他们联系多年后,他们突然打来电话,想知道我是否可以将应用程序更新为.Net.我的初步反应是拒绝,因为我不使用VB.Net.看了一堆关于移植困难等的帖子,我更倾向于拒绝,可以这么说.

不过,在我告诉他们之前,我没有兴趣大致量化所需的努力.我很乐意听到有人做过这样的事情,感受到了多少工作.是吗

>显着低于原来使用的努力?
>比原来使用的努力少一些?
>与原来使用的努力一样吗?
>更多
>还有更多?

如果您实际上已经完成了这样的端口,请您回复.答案不一定要准确,因为我真的只是试图去做这个.我的感觉是,这个努力至少与原来的一样多,如果不是更多的话.但我可能错了感谢任何帮助.

我已经做了你所要求的在我的情况下,这是一个(业余)保龄球锦标赛mgmt系统:会员数据库mgmt(个人信息,irs / Winnings信息,邮寄名单等),比赛mgmt(玩家分配,得分,车票生成,奖金检查注册和侧盆等等)以及irs EDI一代,为所有获奖者提供了一年.加上大约十亿个小物品分散在50个屏幕/子屏幕之间.

关键是客户了解 – 您必须清楚,他们明白这不是微不足道的;这是你的两个新冒险(特别是如果你是VB.Net的新手)如果他们喜欢你的工作之前,他们可能会很好地给你在他们的镍上学习VB.Net的余地/自由.

阅读一些以前的答案让我提出一些建议(根据30年作为软件开发人员的经验,最后20位作为顾问….)

如果他们提供它,就要付钱.你需要将你的技能带到20世纪;让他们付钱(再次,如果他们同意)他们可能是杂志冲浪,想要“最新的东西”为没有好的原因 – 但也许他们意识到,他们可以延长(你的)应用程序的这个端口的使用寿命.实质上,他们可能会有各种愚蠢的原因,如果他们不雇用你决定这个港口是否是一个好主意.那么你可能对客户关系建设的决定过程表示沮丧;但是,如果他们想这样做,那么它也可能是你的工作.
>采取所有这些mumbo-jumbo re:C#与VB.Net与一粒盐.自从VB.Net / ASPX.net(vs C#)开始以来,我一直在EXCLUSIVELY工作,还没有遇到VB.Net中无法实现的功能.有一些“纯粹主义者”,只是把VB.Net视为玩具.那么我来自于在汇编程序中编写的日子,然后是C,然后是C(你可以抛出Fortran,PL1很好的测量),然后是VB5,然后是6,然后VB.Net …和Now JAVA for Android.它的所有好运气,每个都有它的优点和缺点.记住,C#和VB.Net本质上只是实现元语言中间件的GUI.你可以写一个TERRIBLE(通过效率或内存使用或你选择的任何指标来衡量)!在C#中编程,在VB.Net中是一个很好的(反之亦然).不要用语言语言好好编程. (… C#是“优”??? Gimme休息.)
>我选择允许Visual Studio做大部分的重量级的首次通过.然后你会经历这些错误并清理掉.它变得非常快
但是您需要决定是否利用VB6手工编码的任何框架优势.例如.循环一个字符串来定位一个特定的字符现在就像The_String.IndexOf(“c”)一样简单我发现在我的情况下,我经历了几次代码,并且获得了更好和更好的优势(即对象方向)以及我变得舒适的框架好东西,这增加了你的开发时间(见CLIENT了解咒语),但是你的代码将会更有效率,因为它可能在VB6中.您可以简单地将错误移出来,而不是从框架中获得任何优势.
>我没有发现第三方active-x控件的任何问题.您可以添加对FRAMEWORK对象,COM对象等的引用.甚至可能控制供应商具有.Net(托管代码)版本…或者可能有适合的替代方法,因为您在VB6中编写了该事物. (见客户了解口头禅)

所以如果你还在阅读,那么现在我终于会告诉你,VB6中VB.Net转换/ PORTED应用程序的第二次尝试是原来时间到达工作模式的1/3,而且我是学习框架也是如此. (如果你对自己的技能有信心,多年来学到了几种语言,您将很快获得VB.Net的要点 – 它的“SUBTLETIES”需要一段时间.)

我必须提醒你,如果您不明智地告诉客户端了解,那么真的可以杀死你的事情是,如果他们想在你移植的时候进行更改(这是非常喜欢的,因为他们已经使用了一段时间).我在我的情况下也很真实.

这里没有硬而快的规则.这可能是改变实际上将帮助您更快地理解框架,或更改可能是一个真正的痛苦.只有你可以确定他们可能是哪种味道.如果它们看起来是PAINFUL类型,那么您可能会要求首先进行转换,以便可靠地复制功能 – 然后返回并查看代码以进行更改,并根据需要利用框架.但是,正如我所说,这里没有硬而快的规则 – 不要让纯粹主义者不同的告诉你 – 记住他们可能是同样的人说PASCAL将要接管世界!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强制返回为文本 -------------------------------- 数字类型的格式化 --------------------------------     固定格式参数:     General Number 普通数字,如可以用来去掉千位分隔号     format$("100,1
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办法, Format 或者FormatDateTime 竟然结果和系统设置的区域语言的日期和时间格式相关。意思是尽管你用诸如 Format(Now, "MM/dd/yyyy"),如果系统的设置格式区域语言的日期和时间格式分隔符是"-",那他还会显示为 MM-dd-yyyy     只有拼凑: <%response.write
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace My ‘全局错误处理,新的解决方案直接添加本ApplicationEvents.vb 到工程即可 ‘添加后还需要一个From用来显示错误。如果到这步还不会则需要先打好基础啦 ‘======================================================== ‘以下事件
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用的爽呀,这篇文章写与2011年,看来我以前没有认真去找这个方法呀。 https://blog.csdn.net/chzjxgd/article/details/6176325 金蝶K3 BOS的插件官方是用VB6编写的,如果  能用.Net下的语言工具开发BOS插件是一件很愉快的事情,其中缘由不言而喻,而本文则是个人首创,实现在了用V
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选中的单元格进行处理 Dim m As Range, tmpStr As String, s As String Dim x As Integer, y As Integer, subStr As String If MsgBox("确定要分列处理吗?请确定分列的数据会覆盖它后面的单元格!", _
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single) 2 Dim path As String, hash As String 3 For Each fil
  Imports MySql.Data.MySqlClient Public Class Form1 ‘ GLOBAL DECLARATIONS Dim conString As String = "Server=localhost;Database=net2;Uid=root;Pwd=123456;" Dim con As New MySqlConnection
‘導入命名空間 Imports ADODB Imports Microsoft.Office.Interop   Private Sub A1() Dim Sql As String Dim Cnn As New ADODB.Connection Dim Rs As New ADODB.Recordset Dim S As String   S = "Provider=OraOLEDB.Oracl
Imports System.IO Imports System.Threading Imports System.Diagnostics Public Class Form1 Dim A(254) As String    Function ping(ByVal IP As Integer) As String Dim IPAddress As String IPAddress = "10.0.
VB运行EXE程序,并等待其运行结束 参考:https://blog.csdn.net/useway/article/details/5494084 Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long Pr
今天碰到一个问题,登陆的时候,如果不需要验证手机号为空,则不去验证手机号 因为登陆的时候所有的验证信息都存放在一个数组里 Dim CheckUserInfo() As String ={UserBirthday, SecEmail, UserMob, UserSex, RealNameFirst, RealName, CheckCardID, CheckCardType, Contactemail
在VB6.0中,数据访问接口有三种: 1、ActiveX数据对象(ADO) 2、远程数据对象(RDO) 3、数据访问对象(DAO) 1.使用ADO(ActiveX Data Objec,ActiveX数据对象)连接SQL Server 1)使用ADO控件连接 使用ADO控件的ConnectionString属性就可以连接SQL Server,该属性包含一个由分号分隔的argument=value语
注:大家如果没有VB6.0的安装文件,可自行百度一下下载,一般文件大小在200M左右的均为完整版的软件,可以使用。   特别提示:安装此软件的时候最好退出360杀毒软件(包括360安全卫士,电脑管家等,如果电脑上有这些软件的话),因为现如今的360杀毒软件直接会对VB6.0软件误报,这样的话就可能会在安装过程中被误报阻止而导致安装失败,或者是安装后缺乏很多必须的组件(其它的杀毒软件或安全卫士之类的
Private Sub Form_Load() Call conndb End Sub Private Function conndb() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim strCn, sql As String Dim db_host As String Dim db_user As String
  PPSM06S70:  Add  moddate  EDITSPRINTJOB:  MAX(TO_CHAR(ETRN.MODDATE, ‘yyyy/mm/dd/HH24:MI AM‘)) ACTUAL_SHIPDATE   4.Test Scenario (1) :Query SQL Test DN:8016578337 SELECT CTRN.TKCTID TRUCK_ID,        
  沒有出現CrystalReportViewer時,須安裝CRforVS_13_0. 新增1個數據集,新增1個數據表,添加二列,列名要和資料庫名一樣. 修改目標Framework 修改app.config, <startup >改成<startup useLegacyV2RuntimeActivationPolicy ="true">  CrystalReport1.rpt增加數據庫專家 在表單
Imports System.Threading Imports System Public Class Form1 Dim th1, th2 As Thread Public Sub Method1() Dim i As Integer For i = 1 To 100 If Me.Label1.BackColor =
Friend Const PROCESS_ALL_ACCESS = &H1F0FFF = 2035711 Friend Const PROCESS_VM_READ = &H10 Friend Const PROCESS_VM_WRITE = &H20 Friend Const PAGE_READONLY = &H2 Friend Const PAGE_READWRITE = &H4 Friend
以下代码随手写的 并没有大量测试 效率也有待提升 如果需要C#的请自行转换 Function SplitBytes(Data As Byte(), Delimiter As Byte()) As List(Of Byte()) Dim i = 0 Dim List As New List(Of Byte()) Dim bytes As New
Imports System.Data.SqlClient Public Class Form1 REM Public conn1 As SqlConnection = New SqlConnection("server=.; Integrated Security=False;Initial Catalog= mydatabase1; User ID= sa;password")