CÁC GIẢI PHÁP LẬP TRÌNH C# - Trang 587

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

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")]

Liên Kết Chia Sẽ

** Đây là liên kết chia sẻ bới cộng đồng người dùng, chúng tôi không chịu trách nhiệm gì về nội dung của các thông tin này. Nếu có liên kết nào không phù hợp xin hãy báo cho admin.