没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|其它|编辑:郝浩|2006-07-12 15:14:00.000|阅读 2260 次
概述:
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
本文使用下列技术:
Visual Basic 6.0、Visual Basic 2005 Express、.NET Framework
可在以下地址下载代码:VBFusion05.exe (150KB)
很多开发人员认为如果他们在 Visual Basic® 6.0 中编写代码,Microsoft® .NET Framework
的广阔世界对他们来说就是禁区。但是在本文中,我将证明这种观点是错误的。我将向您介绍如何通过称为 Visual Basic Fusion 的技术从现有的
Visual Basic 6.0 应用程序中轻松地利用 .NET Framework 2.0 中的任何内容。没错,我提倡的正是使您的某些应用程序保留为
Visual Basic 6.0 的状态。然而,没有理由只是因为您选择不升级到 Visual Basic 2005,就关闭 .NET Framework
类库的大门。
那么为什么不升级呢?如果您选择将 Visual Basic 6.0 应用程序升级到 Visual Basic 2005,巨大的资源就可以任由您支配。Visual
Studio® 提供了一个迁移助手,该迁移助手将自动重新编写很多 Visual Basic 6.0 代码。Microsoft 发布了一个 Visual
Basic 6.0 到 Visual Basic 2005 的迁移指南,其中包括一个评估工具,可帮助确定升级应用程序所需的时间和成本。Web
上到处都是有关特定升级问题的文章、方法、提示和技巧。甚至还有一些关于该主题的书籍。有了这么多可用的资源,有人可能要问为什么代码还要保留为 Visual
Basic 6.0 的状态。为什么不将所有代码都升级?
事实上,将代码从 Visual Basic 6.0 升级到 Visual Basic 2005
是一个相当费力的过程,升级是否成功主要取决于两个因素:代码质量和开发人员关于 Visual Basic 2005 和 .NET Framework
的经验。与随着时间流逝而变得杂乱的应用程序相比,结构合理且模块化程度高的应用程序升级起来要更简单。
在 Visual Basic 6.0
的世界中,很多应用程序已在生产中使用了很多年。这些应用程序可能在时间上更紧迫地需要实现功能增强。它们可能由很多开发人员进行编程,其中某些开发人员可能没有足够的时间和耐心完全理解他们正在修改的代码。不管是什么原因,编程人员通常面临使项目运行然后继续改善的压力。因此,代码在一段时间以后就会变得稍显杂乱。如果代码过于杂乱,重新编写可能要优于升级,但是重新编写也不轻松,成本也不低。
就开发人员的经验来说,将复杂且至关重要的 Visual Basic 6.0 应用程序升级到实现 Visual Basic 2005
的速度是一件很可怕的事情。在尝试升级之前熟悉 .NET 非常重要。在这方面有几个原因。如果您只是机械地将 Visual Basic 6.0
应用程序放到迁移向导的流水线上,然后开动流水线,会发现在另一头出现的是根本无法编译和运行的 Visual Basic 2005
应用程序。迁移向导将在代码标记位置(在此处迁移向导不能自动迁移)进行注释。要修复应用程序使其运行,您需要深入了解 Visual Basic 2005 和
.NET Framework。所需的代码更改有时简单而乏味,有时需要重新编写整个应用程序子系统。因此,显然升级并不总是那么轻松。
既然升级被形容为如此乏味,您可能想了解为什么人们还要进行升级。原因在于,将代码库迁移到 Visual Basic 2005
并不是一件小事,但归根结底它是在访问整个 .NET Framework 时不会导致冲突的最佳方式。我还发现利用巨大的 .NET Framework 类库和
Visual Studio 2005 提供的更高的生产力进行开发要有成效得多。Visual Studio 2005 确实使 Visual Studio 6.0
变成老古董了。进行升级时,您不得不对各个应用程序逐个作出决定。它值得付出这么多努力吗?现在做可行吗?
低成本且简单的方法
另一个选择是将应用程序保留在 Visual Basic 6.0 的状态,只在需要时调用 .NET Framework。.NET Framework
本身就包括实现下列功能的类:Ping IP 地址、检测网络连接更改、通过 FTP 传输文件、访问 COM
端口、播放声音、获取操作系统信息(如物理内存和屏幕分辨率)、获取用户和域信息、读写事件日志、访问性能计数器、启动和停止服务以及访问注册表。诸如此类,不胜枚举。当描述
.NET Framework 2.0 类库时,很容易想到“广泛”一词。通过使用 .NET Framework
2.0,您可能会消除对某些第三方控件的依赖,并删除很多 Win32® API 调用。从 Visual Basic 6.0 调用 .NET Framework
非常简单,风险也很低。这也是达到 Visual Basic 2005 编程速度的一种好方法。
要像本文中概述的那样调用 .NET Framework,您需要 Visual Studio 2005 或者 Visual Basic
Express。Visual Basic Express 包括所有工具箱控件、IntelliSense®、调试程序和很多项目项。如果您想测试一下并实践使用
Visual Basic 2005,这些已经足够了。另外,Visual Basic Express 并不是限时运行的试用版。相反,它是经过缩减的 Visual
Studio,旨在供您在创建的应用程序丧失其功能时使用。
您还应该下载与本文章相关的代码,特别是在您使用 Visual Basic Express 时。将包含的 ComClass.zip 文件复制到 \My
Documents\Visual Studio 2005\Templates\ItemTemplates\Visual Basic
文件夹。随后,您会看到该项目项在从 Visual Basic 6.0 调用 .NET Framework 时非常关键,默认情况下,该项目项并不包含在
Visual Basic Express 中。
调用 .NET Framework
Visual Basic 6.0 在调用 COM 对象方面功能颇为强大。然而,.NET Framework 中的类并非 COM 对象,并且不能直接从
Visual Basic 6.0 调用。相反,.NET Framework 类必须通过包装调用。这些包装是使用 COM 类项生成的,它们的行为与其他 COM
对象相似。这些包装可以从 Visual Basic 6.0、Visual Basic Scripting Edition (VBScript)、Visual
Basic for Applications (VBA) 或者其他与 COM 兼容的任何环境中调用。包装内部是在 Visual Basic 2005
中构建的,并且可以无缝地调用到 .NET Framework)。
图 1 Visual Basic 6.0 的 .NET 包装
构建包装是一项并不繁琐的任务。下列步骤将引导您完成为 .NET Framework 2.0 中的 Ping 功能创建 COM 可调用包装的过程。
• 启动 Visual Studio 2005 或 Visual Basic Express。
• 创建一个名为 FX20Wrapper 的新类库项目。
• 选择“项目”菜单,然后选择“添加新项”。
• 选择 COM 类项模板。对于名称,请输入 NetworkWrapper,然后单击“添加”。
• 向 NetworkWrapper 类添加以下函数:
Public Function Ping(ByVal hostNameOrAddress As String, _Optional ByVal timeout As Integer = -1)
If timeout >= 0 Then
Return My.Computer.Network.Ping(hostNameOrAddress, timeout)
Else
Return My.Computer.Network.Ping(hostNameOrAddress)
End If
End Function
大功告成!仅仅使用了几行代码,您就创建了一个 COM 对象,该对象允许您在已知环境中 Ping 每个 IPv4 地址。该函数允许您通过主机名称或 IP 地址进行
Ping。您还可以指定可选超时值。您可以想像一下各种可能性。剩下的唯一步骤是使用 Build(生成)菜单编译 Visual Basic Express
项目。IDE 编译您的项目,并生成一个 DLL,Visual Studio 将其注册为 COM 对象。
接下来,您可以构造一个使用此包装的 Visual Basic 6.0 项目。
• 启动 Visual Basic 6.0 并创建一个新的标准 EXE 项目。
• 在“项目”菜单上,选择“引用”,向 FX20Wrapper 添加一个引用。注意:您的 .NET 项目看起来与任何其他 COM 对象是一样的。
• 在 Ping 按钮的 Click 事件中,添加以下代码:
Private Sub Command1_Click()
Dim network As FX20Wrapper.NetworkWrapper
Set network = New FX20Wrapper.NetworkWrapper
Text2 = Text2 & "正在 Ping " & Text1 & "..."
DoEvents
If network.ping(Text1) Then
Text2 = Text2 & "响应" & vbCrLf
Else
Text2 = Text2 & "未响应" & vbCrLf
End If
End Sub
• 5.运行该应用程序,输入 IP 地址,并单击 Ping 按钮。您应该可以看到如图 2 所示的结果。
确定网络连接状态
人们越来越期待应用程序可以处理网络连接的意外更改。便携式计算机拔出。用户在无线环境下通信。每当网络连接或断开时,操作系统都会通知用户。如果操作系统也通知应用程序是不是会更好呢?有了
Visual Basic 2005,确实如此。每当网络连接状态更改时,My.Computer.Network 对象都会触发一个事件。图 3
中的代码显示了如何增强 NetworkWrapper 类以提供该通知。
请注意:在 New 子例程(NetworkWrapper 对象的构造函数)中,My.Computer.Network 公开了一个 Net-workAvailabilityChanged
事件。该事件不能由 COM 直接使用。相反,该事件与包装内部名为 My_NetworkAvailabilityChanged 的子例程挂接。在该例程中,将触发
COM 可使用的事件。该例程将触发自己的 NetworkAvailabilityChanged 事件,您可以看到该事件包含一个指示网络状态的简单布尔值。
从 Visual Basic 6.0 一端来看,该事件使用起来并不比 Button_Click 事件难。Visual Basic 6.0 应用程序的代码显示在图
4 中。借助于少量的代码,Visual Basic 6.0
应用程序可以快速了解网络状态。在实现该包装的实际应用程序中,当网络不可用时,状态栏可能将其状态指示为“脱机”并禁用访问网络资源的功能。
旧事物和新事物
FTP 的最初 RFC 发布于 1973 年,现在 FTP 仍是最受欢迎的通过 Internet 传输文件的协议之一。Microsoft 在过去已经通过
Microsoft Internet 传输控制和 WinInet API 为 FTP 提供了编程支持。然而,至今 .NET Framework 仍没有提供对
FTP 的本地支持。.NET Framework 2.0 通过 WebClient、FtpWebRequest 和 FtpWebResponse 类为 FTP
添加了支持。通过这些类,您可以执行多种 FTP 操作。特定操作和它们映射的 FTP 命令由 WebRequestMethods.Ftp 成员进行描述,如图 5
所示。
受文件大小和网络带宽的影响,下载文件所需的时间相差很大。为适应这种状况,FTP 类既支持同步操作也支持异步操作。同步操作对程序来说最简单,一个下载只需要两行
Visual Basic 2005 代码:
Dim w As New WebClient
w.DownloadFile(address, fileName)
然而,同步应用程序在下载操作完成之前会阻止(冻结)该应用程序。尽管此行为可能适用于命令行或者批处理操作,但是很少有用户喜欢在应用程序重新开始时未提供任何指示就停止。FTP
异步操作对单独的线程执行下载,并触发通知进度和下载完成的事件。图 6 显示 FTP 类的包装,该包装同时提供同步和异步操作。
FTPWrapper 类建立在上述概念之上。首先,该类是使用 ComClass 项目项模板生成的。这就保证了 FTPWrapper 将包含注册为 COM
对象所必需的 GUID。WebClient 的实例是在类级别上已定义维度的 WithEvents。这就允许该类中的所有方法访问该单一实例,它还允许
FTPWrapper 类处理 WebClient DownloadProgressChanged 和 DownloadFileCompleted 事件。
DownloadFile 子例程包含一行代码并执行特定文件的同步下载。如上所述,在下载文件时,调用该子例程会使应用程序停止。
对于下载文件,DownloadFileAsync 是一种更常见也更有趣的方式。该子例程首先确保没有其他的异步操作正在运行。如果有,该子例程就会引发异常,它类似于
Visual Basic 2005 中的 Err.Raise。接下来,DownloadFileAsync 使用 FtpWebRequest 类执行 SIZE
FTP 命令,该命令返回请求的文件的大小(以字节为单位)。需要获得文件大小才能准确显示下载进度。最后,调用 WebClient
DownloadFileAsync 函数。该函数在后台启动文件下载进程,并开始 DownloadProgressChanged 事件的常规触发。
WebClient DownloadProgressChanged 事件不能由 COM
直接使用,所以也会包装该事件。DownloadProgressChanged
的处理程序会触发新事件,该事件传递下载的字节和总文件大小的简单整数参数。Visual Basic 6.0 可以轻松使用该事件。同样,将对
DownloadFileCompleted 事件进行包装并使其可由 Visual Basic 6.0 使用。
创建包装的主要目的是使 .NET Framework 类显示为具有可轻松使用的属性、方法和事件的典型 COM 对象。FTPWrapper 实现了该目的,图 7
显示了使用 FTP 下载文件所需的 Visual Basic 6.0 代码。
启动下载与确定 FTPWrapper 类的维度和调用 DownloadFile 或 DownloadFileAsync 子例程一样简单。如果您调用
DownloadFileAsync,则 FTPWrapper 将在下载过程中触发 DownloadProgressChanged 事件并在下载完成时触发
DownloadFileCompleted 事件。DownloadProgressChanged
事件接收到目前为止下载的字节数和总文件大小。该信息是提供下载进度指示所需的所有信息。图 8 显示下载过程中的 Visual Basic 6.0 FTP 客户端。
图 3 在 Visual Basic 6.0 中实现的 FTP 客户端
本文供下载的代码包含本文所示的包装类和示例应用程序。要试验这些示例,只需下载代码并执行包含的 install.bat 文件。该操作会将包装类注册为 COM
对象。然后,您可以运行任意 Visual Basic 6.0 示例。
结论
Visual Basic 6.0 已成为又一个 COBOL。这么说并不表示对其中任何一种语言怀有恶意。COBOL
曾经非常成功,因为它使自身成为编写关键任务主机应用程序所使用的语言。当世界转向胖客户端和 GUI 时,Visual Basic
开始风光无限,成为很多业务方案勿庸置疑的最佳语言。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com
接DevExpress原厂商通知,将于近日上调旗下产品授权价格,现在下单客户可享受优惠报价!
面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@evget.com
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
慧都科技 版权所有 Copyright 2003-
2025 渝ICP备12000582号-13 渝公网安备
50010702500608号