• Thứ Ba, 27/04/2004 21:36 (GMT+7)

    Sử dụng hàm API trong C#

    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

     

    ID: A0402_92