SỬ DỤNG DLL TRONG .NET
14/06/2007 04:49 PM
Trong các chương trình viết trên nền .NET, ngoài việc sử dụng
bộ thư viện được cung cấp bởi .NET Framework, đôi khi chúng
ta có nhu cầu sử dụng các hàm được viết trên nền Windows,
như các hàm API của Windows. Thông thường, các hàm này
được cài đặt trong các thư viện liên kết động (DLL), được dịch
bằng một trình dịch nào đó như MS Visual C++ hay Borland
Delphi.
Các thư viện khi phát hành thường gồm 3 tệp, tệp tiêu đề có phần
mở rộng .h chứa khai báo các hàm, tệp thư viện nhập có phần mở
rộng .lib và tệp thư viện liên kết động có phần mở rộng .dll.
Để sử dụng các hàm của thư viện liên kết động trong .NET, chỉ cần
tệp .dll là đủ, ngoài ra còn cần tệp .h để biết nguyên mẫu các hàm, từ
đó khai báo các hàm trong .NET một cách đúng đắn.
Trong bài này, tôi giới thiệu cách sử dụng các hàm viết trong một thư
viện liên kết động, được dịch bằng Visual C++ trong một chương
trình viết trên nền .NET. Thư viện minh hoạ trong bài học này là thư
viện đã được giới thiệu trong bài Thư viện liên kết động, môn học
Lập trình Windows. Đây là một thư viện đơn giản với hai hàm: hàm
tính luỹ thừa và hàm tính giai thừa.
Tệp tiêu đề của thư viện được khai báo như sau:
/* MyDll.h */
#ifndef __MYDLL_H__
#define __MYDLL_H__
#ifdef MYDLL_EXPORTS
#define MYDLLEXPORT _declspec(dllexport)
#else
#define MYDLLEXPORT _declspec(dllimport)
Console.WriteLine(”2.0 to power 3 is {0}”,
Power(2.0, 3));
Console.WriteLine(”Factorial of 5 is {0}”,
Factorial(5));
}
}
}
Một trong những vấn đề thường gặp phải khi sử dụng hàm
viết trên nền Windows trong .NET là kiểu dữ liệu giữa hai nền
không giống nhau. Sau đây là một vài kiểu chuyển đổi để có
thể gọi hàm một cách đúng đắn.
Kiểu số nguyên 1 byte:
Windows: TCHAR (char), BYTE (unsigned char).
.NET: sbyte, byte (C#), Byte (VB.NET).
Kiểu số nguyên 4 byte:
Windows: int, UINT (unsigned int), DWORD (unsigned int), LONG
(long).
.NET: int (C#), Integer (VB.NET) hoặc Int32.
Kiểu số thực 4 byte:
Windows: float.
.NET: float (C#), Single (VB.NET)
Kiểu số thực 8 byte:
Windows: double.
.NET: double (C#), Double (VB.NET).
Kiểu xâu ký tự (vào):
Windows: LPCTSTR, LPSTR.
.NET: string (C#), String (VB.NET).
Kiểu xâu ký tự (ra):