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

594
Chương 15: Khả năng liên tác mã lệnh không-được-quản-lý

}

Nếu chạy ứng dụng này trên hệ thống Windows XP, bạn sẽ thấy thông tin như sau:

Class size: 148

Major Version: 5

Minor Version: 1

Build Number: 2600

Platform Id: 2

CSD Version: Service Pack 1

Platform: Win32NT

Version: 5.1.2600.0

4.

4.

G i m t hàm không-đ

c-qu n-lý có s d ng callback

ọ ộ

ượ

ử ụ

G i m t hàm không-đ

c-qu n-lý có s d ng callback

ọ ộ

ượ

ử ụ

Bạn cần gọi một hàm không-được-quản-lý và cho phép nó gọi một hàm khác.

Tạo một ủy nhiệm cho callback. Sử dụng ủy nhiệm này khi định nghĩa và sử
dụng hàm không-được-quản-lý.

Nhiều hàm của Win32 API sử dụng callback. Ví dụ, nếu muốn lấy tên của tất cả các cửa sổ
đang mở, bạn có thể sử dụng hàm

EnumWindows

trong thư viện user32.dll . Khi gọi

EnumWindows

, bạn cần truyền cho nó một con trỏ chỉ đến một hàm khác trong mã lệnh của bạn.

Hệ điều hành Windows sau đó sẽ gọi hàm này mỗi khi tìm thấy một cửa sổ đang mở, và truyền
handle của cửa sổ cho nó.
.NET Framework cho phép bạn quản lý việc sử dụng callback mà không cần các con trỏ và
các khối mã không an toàn. Thay vào đó, bạn có thể định nghĩa và sử dụng một ủy nhiệm chỉ
đến hàm callback. Khi bạn truyền ủy nhiệm cho hàm

EnumWindows

, CLR sẽ tự động marshal ủy

nhiệm thành con trỏ hàm không-được-quản-lý như mong muốn.
Ví dụ dưới đây sử dụng

EnumWindows

cùng với một callback để hiển thị tên của tất cả các cửa

sổ đang mở.

using System;

using System.Text;

using System.Runtime.InteropServices;

public class GetWindows {

// Chữ ký cho hàm callback.

public delegate bool CallBack(int hwnd, int lParam);

// Hàm không-được-quản-lý sẽ kích hoạt callback

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.