GT C Sharp cơ bản – Bài 28 : Chương 27: Tính tương hoạt
Chương 27: Tính tương hoạt
Tác giả: Sưu tầm
Khái quát
Một trong những khả năng quan trọng của C# là có thể tương hoạt với mã đã tồn tại, dù nó dựa trên COM hay một DLL gốc. Chương này cung cấp một khái quát ngắn gọn cách tính tương hoạt làm việc.
Sử dụng các đối tượng COM
Để gọi một đối tượng COM, bước trước tiên là định nghĩa một lớp uỷ quyền (hay lớp bao) mà nó định nghĩa các hàm trong đối tượng COM, cùng với thông tin bổ sung. Đây rõ ràng là lượng công việc chán ngắt, mà có thể được tránh trong hầu hết các trường hợp bằng cách sử dụng tiện ích tlbimp. Tiện ích này đọc thông tin thư viện kiểu COM và sau đó tạo một lớp uỷ quyền. Nó sẽ làm việc trong nhiều tình huống, nhưng nếu nhiều điều khiển hơn cần được thu thập, các đặc tính được sử dụng để chỉ định cách thu thập nên được thực hiện.
Một khi lớp uỷ quyền được viết nó được sử dụng như bất kỳ lớp .NET nào khác, và thời gian chạy xử lý các vấn đề khó chịu.
Được sử dụng bởi những đối tượng COM
Thời gian chạy cũng cho phép các đối tượng .NET được sử dụng thay cho các đối tượng COM. Tiện ích tlbexp được sử dụng để tạo một thư viện kiểu mô tả các đối tượng COM, để các chương trình dựa trên COM khác có thể xác định giao diện của đối tượng, và tiện ích regasm được sử dụng để đăng ký một hợp tập để nó có thể được truy xuất thông qua COM. Khi COM truy xuất một lớp .NET, thời gian chạy xử lý việc tạo đối tượng .NET, tạo dựng bất kỳ giao diện COM nào được đòi hỏi, và thu thập dữ liệu giữa .NET và COM.
Gọi các hàm DLL gốc
C# có thể gọi các hàm được viết với mã máy thông qua một đặc tính thời gian chạy gọi là “triệu gọi nền tảng”. Tập tin mà hàm được định vị trong đó được chỉ định bằng đặc tính sysimport, mà có thể cũng được sử dụng để chỉ định cách thu thập ký tự mặc định. Trong nhiều trường hợp, đặc tính này là tất cả những gì ta cần, nhưng nếu một giá trị được chuyển bằng tham chiếu, thì các đặc tính in và out có thể được chỉ định để báo cho trình thu thập cách chuyển giá trị.
class Test {
[sysimport(dll=”user32.dll”)]
public static extern int MessageBoxA(int h, string m, string c, int type);
public static void
int retval = MessageBoxA(0, “Hello”, “Caption”, 0);
}
}
Khi mã thực hiện, một hợp thông báo sẽ xuất hiện.