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

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

icrosoft .NET Framework là một nền cực kỳ cao vọng, là sự kết hợp của một ngôn
ngữ mới (C#), một bộ thực thi được-quản-lý (CLR), một nền cho các ứng dụng
Web (Microsoft ASP.NET), và một thư viện lớp rất lớn để xây dựng tất cả các kiểu

ứng dụng. Tuy nhiên, .NET Framework không lặp lại các tính năng có trong mã lệnh không-
được-quản-lý. Hiện thời, .NET Framework không bao gồm mọi hàm có trong Win32 API,
trong khi nhiều doanh nghiệp đang sử dụng các giải pháp phức tạp được xây dựng với các
ngôn ngữ dựa-trên-COM như Microsoft Visual Basic 6Microsoft Visual C++ 6. May mắn
Microsoft không có ý để những doanh nghiệp đó bỏ đi nền tảng mã lệnh mà họ đã xây dựng
khi chuyển sang nền .NET. Thay vào đó, .NET Framework được trang bị với các tính năng
interoperability (khả năng liên tác), cho phép bạn sử dụng lại mã lệnh cũ (legacy code) trong
các ứng dụng .NET Framework và truy xuất các assembly .NET như thể chúng là các thành
phần COM. Chương này sẽ thảo luận các vấn đề sau:

M

Cách gọi các hàm thuộc DLL không-được-quản-lý (mục 15.1 đến 15.5).

Cách sử dụng thành phần COM trong ứng dụng .NET Framework (mục 15.6 đến 15.8).

Cách sử dụng điều kiểm ActiveX trong ứng dụng .NET Framework (mục 15.9).

Cách tạo một thành phần .NET sao cho một COM-client có thể sử dụng nó (mục 15.10).

1.

1.

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

c-qu n-lý

ọ ộ

ượ

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

c-qu n-lý

ọ ộ

ượ

Bạn cần gọi một hàm C trong một DLL. Đây có thể là một hàm của Win32 API
hoặc do bạn viết.

Khai báo một phương thức trong mã C# mà bạn sẽ sử dụng để truy xuất hàm
không-được-quản-lý. Khai báo phương thức này là

static

extern

, áp dụng

đặc tính

System.Runtime.InteropServices.DllImportAttribute

để chỉ định file

DLL và tên của hàm cần dùng.

Để sử dụng một hàm C từ một thư viện ngoài, bạn chỉ cần khai báo nó một cách thích hợp.
CRL sẽ tự động đảm trách phần việc còn lại, bao gồm việc tải DLL vào bộ nhớ khi hàm được
gọi và chuyển các thông số từ kiểu dữ liệu .NET thành kiểu dữ liệu C.
Dịch vụ .NET hỗ trợ việc thực thi xuyên-nền này có tên là PInvoke (Platform Invoke), và quá
trình này thường là trong suốt đối với người sử dụng. Thỉnh thoảng, bạn sẽ cần thực hiện thêm
một số việc, chẳng hạn cần hỗ trợ cấu trúc trong-bộ-nhớ (in-memory structure), callback, hay
chuỗi có thể thay đổi (mutable string).
PInvoke thường được sử dụng để truy xuất các hàm Win32 API, đặc biệt là các tính năng
không có trong các lớp được-quản-lý thuộc .NET Framework. Các ví dụ được trình bày trong
chương này sẽ sử dụng PInvoke theo cách này. Có ba thư viện chính trong Win32 API:

kernel32.dll

gồm các hàm đặc-trưng-hệ-điều-hành như nạp tiến trình, chuyển ngữ

cảnh, nhập/xuất file và bộ nhớ.

user32.dll

gồm các hàm dùng để thao tác cửa sổ, trình đơn, hộp thoại, biểu tượng,…

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.