외부 라이브러리와의 작업은 Visual Basic의 가능성을 확장하여 표준 클래스뿐 아니라 .NET 라이브러리(DLL)와 전통적인 COM 객체와 같은 외부 구성 요소를 사용할 수 있게 합니다.
VB는 본래 COM 구성 요소(ActiveX, OCX)와의 상호 작용을 염두에 두고 설계되어 "프로젝트 - 참조"를 통해 이러한 라이브러리를 연결할 수 있었습니다. VB.NET의 등장으로 .NET 어셈블리에 대한 참조 추가와 P/Invoke(Declare)를 통한 외부 메서드 사용이 더 편리해졌습니다.
주요 어려움은 실행 시간 오류, 호환성 문제 및 외부 코드와 상호 작용 시 리소스 누수를 피하기 위해 통합 방식을 올바르게 선택해야 한다는 것입니다.
.NET에서는 .NET 라이브러리나 등록된 COM 구성 요소를 사용하기 위해 _Add Reference_를 사용하여 어셈블리에 대한 참조를 추가하고, 네이티브 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 라이브러리는 단순한 참조 추가로 연결되며, regsvr32를 통한 등록은 COM 라이브러리만 요구됩니다.
Declare를 통해 .NET 메서드를 연결할 수 있나요, 아니면 네이티브 Win32 함수만 가능한가요?
아니요, Declare는 일반(non-.NET) DLL에서 stdcall/FARPROC 함수를 내보내는 함수에만 적용됩니다. .NET 함수는 Add Reference/Imports를 통해 호출됩니다.
개발자가 문서를 읽지 않고 Declare를 통해 외부 .NET 라이브러리를 사용하려고 시도하여 컴파일 단계에서 오류를 받았습니다.
장점:
단점:
Add Reference를 통해 올바르게 .NET 참조를 추가한 후 Imports를 사용하고 필요한 클래스의 인스턴스를 생성했습니다.
장점:
단점: