VB中调用VB.NET包装类

概述

许多组织都有一个重要的 Microsoft Visual Basic 6 代码基,并且试图就该旧式代码作出最好的决断。在决定如何处理 Visual Basic 6 应用程序时,基本有三种选择。可以维持 Visual Basic 6 应用程序的现状,而无需向该旧式应用程序中加入任何新技术。可以将 Visual Basic 6 应用程序完全迁移到 Visual Basic .NET 中。或者,可以保留您的 Visual Basic 6 代码,与 Visual Basic .NET 进行交互,以便轻松地将 .NET Framework 中的任何功能添加到现有应用程序中。本文将讨论最后一种最佳做法(称为 Visual Basic Fusion)。

了解 Visual Basic 6 和 Visual Basic .NET 运行库

Visual Basic 6 应用程序本质上是 COM 应用程序。当您想在 Visual Basic 6 中执行某些操作(如访问数据库或生成用户接口)时,需要添加对适当 COM 组件的引用,然后使用它包含的功能。通常,其他应用程序还通过 COM 组件公开功能。例如,Visual Basic 6 应用程序可以使 Microsoft Word 或 Excel 自动运行,因为这些应用程序公开了 COM 接口。

Visual Basic .NET 应用程序不基于 COM,默认情况下不公开 COM 接口。Visual Basic .NET 应用程序访问 .NET 类库中的功能。Microsoft .NET Framework 包括上千个类库,这些类库允许 Visual Basic .NET 应用程序与数据库通信,访问 Internet、注册表、文件系统、事件日志、系统信息等。.NET Framework 类库 (FCL) 中可用功能的数量远大于 Visual Basic 6 中可用功能的数量。

Visual Basic 6 和 Visual Basic .NET 建立在互不兼容的技术之上。Visual Basic 6 应用程序可以访问 .NET 类库,但要这么做,它必须借助互操作层,即客户端可调用的包装。这将包装所需的 .NET 类并将其公开,以便该类如传统的 COM 对象那样,可以在任何可以使用 COM 对象的环境(Visual Basic 6、Visual Basic 5、ASP、VBA、VBScript 等)中使用。

调入框架

Using the .NET Framework Class Library from Visual Basic 6 文章中所述,调入 .NET Framework 的第一步是将所需的 .NET Framework DLL(称作程序集)注册为 COM 对象。这可以通过 .NET Framework SDK 提供的 regasm 命令行工具实现,.NET Framework SDK 是作为 Visual Basic Express 产品的一部分安装的。如果您尚未安装 Visual Studio 2005,强烈建议您下载并安装免费的 Visual Basic Express。

演练 1. 注册 System.dll 以便可以在 Visual Basic 6 中使用

1.

导航到 Start | Run

2.

Run 对话框中,输入 CMD ,然后单击 OK

3.

输入 cd C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727

4.

输入 regasm system.dll

注册程序集之后,即可在 Visual Basic 6 中添加对它的引用,如同它是任何其他 COM 对象一样:


图 1. 在 Visual Basic 6 中添加对 system.dll 的引用

而且,Visual Basic 6 将能够调入 System.dll .NET 程序集,因为已经为它创建了 COM 可调用包装。然而,要使 .NET 类及其功能出现在 COM 可调用包装中,.NET 类必须遵循一组相当严格的规则。因此,System.dll 中只有很少一部分类可以在 Visual Basic 6 中直接调用。在 Visual Basic 6 中可以调用的一个函数是 WebClient.DownloadFile 函数。

清单 1. 在 Visual Basic 6 中调用 DownloadFile 函数

Dim webDownload As System.WebClient
Set webDownload = New System.WebClient
webDownload.downloadFile _ 
    "http://www.ssec.wisc.edu/data/west/latest_westir.jpg", _
    App.Path & "/latest_westir.jpg"

用 Visual Basic .NET 创建包装

前面的示例不应该制造这样的假相:您只需使用 Regasm 和任何 .NET 程序集,Visual Basic 6 就能使用所有 .NET 功能。几乎在所有情况下,如果您要调入 .NET Framework、第 3 方 .NET 组件或开放的源 .NET 库,都必须编写 Visual Basic .NET 包装类。原因是,.NET 类必须遵循相当严格的规则才能将它自己正确地表现为 COM 对象,大多数 .NET 类并不遵循这些规则。

要使用 .NET 功能,您需要在 Visual Basic .NET 中创建一个确实遵循 COM 互操作性规则的类,该类代表 Visual Basic 6 应用程序调入所需的 .NET 代码。


图 2. 通过 Visual Basic .NET 包装类在 Visual Basic 6 中调入 .NET Framework

简单的包装类

如需简单的示例,请考虑 .NET Framework Guid 类。GUID 是“全局唯一标识符”(Globally Unique Identifier)。GUID 在 Windows 中的许多地方用于唯一标识 COM 对象、文件、用户,以及几乎其他任何内容。它们采取字符串形式,如:13427d57-ccb5-42fd -91f 7-b49d 4c 2ae 9a 3 。关于 GUID 重要的是,如果您正确地生成了一个 GUID,绝对可以 100% 地确定没有其他人会生成相同的 GUID。

在 Visual Basic 6 中没有生成 GUID 的简单方法,但 Visual Basic .NET 中只需要一行代码:

清单 2. 在 Visual Basic .NET 中生成 GUID

Dim g as Guid = Guid.NewGuid()

遗憾的是,Guid 类不是用这种可以在 Visual Basic 6 中直接调用的方式创建的。要在 Visual Basic 6 中使用该功能,您需要创建一个非常简单的 Visual Basic .NET 包装类。该 Visual Basic .NET 包装类将自己作为 Visual Basic 6 可以使用的 COM 对象公开,并将所需的调用放入 .NET Framework Guid 类中。

Can I Interest you in 5000 Classes ”中包括了有关创建包装类的详细信息,但在此要重复一些基本知识:

演练 2. 创建 Guid 类的 Visual Basic .NET 包装

1.

下载并解压缩本文的示例代码

2.

ComClass.zip 文件复制到 C:/Documents and Settings/[User Name]/My Documents/Visual Studio 2005/Templates/ItemTemplates/Visual Basic 中。

如果您使用的是 Visual Studio 2005,可以跳

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值