与外部库的工作扩展了 Visual Basic 的功能,允许使用不仅是标准类,还有第三方组件——既可以是 .NET 库(DLL),也可以是经典的 COM 对象。
最初,VB 主要针对与 COM 组件(ActiveX,OCX)的交互,允许通过“项目 – 引用”连接这些库。随着 VB.NET 的出现,增加了引用 .NET 程序集的能力,并通过 P/Invoke(Declare)更方便地使用外部方法。
主要难点在于需要正确选择集成方式,以避免运行时错误、兼容性问题和在与外部代码交互时出现的资源泄露。
在 .NET 中,使用 Add Reference 来使用 .NET 库或注册的 COM 组件,这将添加对程序集的引用;要调用本机 DLL 的过程,使用 Declare。
使用 .NET 库的示例(Add Reference):
' 添加 .NET 引用后 Imports System.IO Dim reader As New StreamReader("file.txt") Dim line As String = reader.ReadLine() reader.Close()
从 WinAPI 调用函数的示例(Declare):
' 从 user32.dll(WinAPI)调用函数 Declare Function MessageBeep Lib "user32" (ByVal wType As Integer) As Boolean Sub TestBeep() MessageBeep(0) End Sub
关键特点:
可以使用 Imports 结构从外部 DLL 加载函数吗?
不可以,Imports 语句只简化了对连接程序集内命名空间的访问,但不能用于动态加载来自本机 DLL 的函数。
在 VB.NET 中通过 Add Reference 使用 .NET 程序集是否需要注册?
不需要,.NET 库通过简单添加引用即可连接,而仅对 COM 库要求使用 regsvr32 注册。
可以通过 Declare 连接 .NET 方法,而不仅仅是本机 Win32 函数吗?
不可以,Declare 仅适用于导出 stdcall/FARPROC 函数的普通(非 .NET)DLL。 .NET 函数通过 Add Reference/Imports 调用。
开发人员决定通过 Declare 使用第三方 .NET 库,未查看文档,导致编译时出错。
优点:
缺点:
通过 Add Reference 正确添加 .NET 引用,然后使用 Imports 并创建所需类的实例。
优点:
缺点: