Bài 10: Interop


.NET đã được thiết kế rõ ràng để tương tác với các thư viện native với chi phí thấp. Các chương trình và thư viện .NET có thể gọi các API hệ điều hành cấp thấp một cách liền mạch hoặc khai thác hệ sinh thái rộng lớn của các thư viện C/C++. Thời gian chạy .NET hiện đại tập trung vào việc cung cấp các khối xây dựng tương tác cấp thấp, chẳng hạn như khả năng gọi các native method thông qua các con trỏ hàm, xuất các phương thức .NET dưới dạng unmanaged callbacks hoặc customized interface casting. .NET cũng liên tục phát triển trong lĩnh vực này và trong .NET 7 đã phát hành các giải pháp tạo mã nguồn giúp giảm thêm chi phí hoạt động và thân thiện với AOT.

Đoạn mã sau minh họa hiệu quả của các con trỏ hàm C#.

// Using a function pointer avoids a delegate allocation.
// Equivalent to `void (*fptr)(int) = &Callback;` in C
delegate* unmanaged<int, void> fptr = &Callback;
RegisterCallback(fptr);

[UnmanagedCallersOnly]
static void Callback(int a) => Console.WriteLine($"Callback:  {a}");

[LibraryImport("...", EntryPoint = "RegisterCallback")]
static partial void RegisterCallback(delegate* unmanaged<int, void> fptr);

Ví dụ này sử dụng trình tạo mã nguồn LibraryImport được giới thiệu trong .NET 7. Nó dựa trên DllImport hoặc P/Invoke hiện có.

Các gói độc lập cung cấp các giải pháp tương tác dành riêng cho domain cao hơn bằng cách tận dụng các khối xây dựng cấp thấp này, ví dụ: ClangSharpXamarin.iOS & Xamarin.MacCsWinRTCsWin32 và DNNE.

Những tính năng mới này không có nghĩa là các giải pháp tương tác tích hợp sẵn như runtime managed/unmanaged marshalling trong thời gian chạy tích hợp sẵn hoặc tương tác với Windows COM không hữu ích — chúng tôi biết như vậy và mọi người đã tin tưởng vào chúng. Những tính năng trước đây đã được tích hợp trong thời gian chạy tiếp tục được hỗ trợ nguyên trạng, chỉ để tương thích ngược, không có kế hoạch phát triển chúng hơn nữa. Tất cả các khoản đầu tư trong tương lai sẽ được tập trung vào các interop building block và trong các domain cụ thể và hiệu suất cao hơn mà chúng cho phép.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s