(Post 28/04/2006) API (Application Programming
Interface) là cách thức dùng để gọi hàm bên trong thư viện liên kết động
DLL thực hiện các tác vụ Windows như tạo và huỷ các cửa sổ ứng dụng, các
control và menu; truy xuất các dịch vụ hệ thống màn hình, bàn phím và
chuột, máy in và nhiều chức năng khác. Các hàm API thường được viết bằng
C++.
Chúng ta đã khá quen thuộc với việc dùng hàm API trong
các ngôn ngữ lập trình như Visual Basic, Visual Foxpro, Visual C++, Delphi....
Trong bài viết này tôi muốn giới thiệu cách gọi hàm API trong họ nhà .NET,
ngôn ngữ đại diện là C#.
Để khai báo API trong C#, chúng ta sử dụng cú pháp sau:
using System.Runtime.InteropServices;
....
[DllImport(DLL_FileName) ]
[public|private] static extern Return_Type Function_Name([type parameter,...
]);
Chúng ta bắt đầu với một hàm API đơn giản là hàm MessageBox
trong C#. Mở một form C# mới, thêm vào đó một button. Kế tiếp chúng ta
thêm vào không gian tên (namespace):
using System.Runtime.InteropServices;
Sau đó khai báo thêm dòng
[DllImport('User32.dll')]
public static extern int MessageBox(int a, string b, string c, int type);
Ở đây, thuộc tính DllImport được sử dụng để gọi hàm từ
thư viện User32.dll, User32.dll là tên thư viện cần gọi, MessageBox là
tên hàm trả về kiểu Int.
Thêm vào mã nguồn cho sự kiện Click của button
protected void button1_Click(object sender, System.EventArgs e)
{
MessageBox(0,'API Message Box','API Demo', 0);
}
Biên dịch và thực hiện project này, sau khi nhấn chuột
trên button bạn sẽ thấy một hộp thoại được sử dụng hàm API. Sau đó bạn
thay đổi tham số thứ 4 trong hàm MessageBox, bạn sẽ thấy sự khác biệt
như thế nào.
Sử dụng các API có cấu trúc, hoặc cấu trúc lồng trong
cấu trúc sẽ phức tạp hơn. Nhưng một khi bạn đã hiểu được cách thực hiện
của các hàm API thì toàn bộ thế giới API sẽ nằm trong tay bạn.
Trong ví dụ tiếp theo, chúng ta sẽ sử dụng hàm GetSystemInfo
API, hàm này sẽ trả về thông tin về hệ thống hiện tại. Trước tiên bạn
mở một form C# mới và thêm một nút (button) trên form. Chuyển sang phần
nhập code:
using System.Runtime.InteropServices;
//Khai báo cấu trúc với những tham số của GetSystemInfo.
[StructLayout(LayoutKind.Sequential)]
public struc SYSTEM_INFO
{
public uint dwOemId;
public uint dwPageSize;
public uint lpMinimumApplicationAddress;
public uint lpMaximumApplicationAddress;
public uint dwActiveProcessorMask;
public uint dwNumberOfProcessors;
public uint dwProcessorType;
public uint dwAllocationGranulariry;
public uint dwProcessorLevel;
public uint dwProcessorRevision;
}
//Khai báo hàm API:
[DllImport('kernel32')]
public static extern void GetSystemInfo(ref SYSTEM_INFO pSI);
//Trong sự kiện Click của button thêm đoạn code
protected void button1_Click(object sender, System.EventArgs e)
{
try
{
SYSTEM_INFO pSI = new SYSTEM_INFO();
GetSystemInfo(ref pSI);
e.g.listBox1.InsertItem
(0,pSI.dwActiveProcessorMask.ToString());
}
catch(Exception er)
{
MessageBox.Show (er.Message);
}
} |
Bạn có thể tìm thấy danh sách các hàm API trong API Text
Viewer đi kèm theo bộ Visual Studio 6, hoặc các tài liệu C++.NET cũng
cho ta biết cách sử dụng các hàm API.
Cao Thanh Sơn
ctsdhv@yahoo.com
(theo PC World) |