587
Chương 15: Khả năng liên tác mã lệnh không-được-quản-lý
•
gdi32.dll
gồm các hàm đồ họa dùng để để vẽ trực tiếp lên cửa sổ, trình đơn, bề mặt
điều kiểm, cũng như để in ấn.
Ví dụ, xét các hàm Win32 API dùng để đọc và ghi các file INI, chẳng hạn
GetPrivateProfileString
và
WritePrivateProfileString
trong kernell32.dll. .NET
Framework không có lớp nào bọc lấy chức năng này. Tuy nhiên, có thể nhập các hàm này
bằng đặc tính
DllImportAttribute
như sau:
[DllImport("kernel32.DLL", EntryPoint="WritePrivateProfileString")]
private static extern bool WritePrivateProfileString(string lpAppName,
string lpKeyName, string lpString, string lpFileName);
Các đối số trong phương thức
WritePrivateProfileString
phải tương thích với hàm trong
DLL, nếu không sẽ có lỗi khi gọi nó. Vì phương thức
WritePrivateProfileString
được khai
báo để tham chiếu đến một hàm trong DLL nên bạn không được viết mã cho nó. Phần
EntryPoint
trong đặc tính
DllImportAttribute
trong ví dụ này là tùy chọn, vì tên phương
thức được khai báo đã trùng với tên của hàm trong thư viện ngoài.
Trong ví dụ sau, lớp
IniFileWrapper
khai báo các phương thức riêng tham chiếu tới các hàm
Win32 API, sau đó gọi chúng từ các phương thức công khai khác dựa trên file được chỉ định:
using System;
using System.Text;
using System.Runtime.InteropServices;
using System.Windows.Forms;
public class IniFileWrapper {
private string filename;
public string Filename {
get {return filename;}
}
public IniFileWrapper(string filename) {
this.filename = filename;
}
[DllImport("kernel32.dll", EntryPoint="GetPrivateProfileString")]
private static extern int GetPrivateProfileString(string lpAppName,
string lpKeyName, string lpDefault, StringBuilder lpReturnedString,
int nSize, string lpFileName);
[DllImport("kernel32.dll", EntryPoint="WritePrivateProfileString")]