Nhiều phương pháp trong thư viện .Net được triển khai trong mã gốc. Những người đến từ khuôn khổ chính nó được đánh dấu bằng [MethodImpl(MethodImplOptions.InternalCall)]
. Những người đến từ một số DLL không được quản lý được đánh dấu bằng [DllImport]
(ví dụ: [DllImport("kernel32.dll")]
). Cho đến nay không có gì bất thường.[DllImport ("QCall")] là gì?
Nhưng khi viết answer for another question, tôi phát hiện ra có nhiều phương pháp được đánh dấu bằng [DllImport("QCall")]
. Dường như họ đang triển khai nội bộ .Net (ví dụ: GC._Collect()
).
Câu hỏi của tôi là: Chính xác [DllImport("QCall")]
là gì? Sự khác nhau giữa [DllImport("QCall")]
và [MethodImpl(MethodImplOptions.InternalCall)]
là gì?
Đó là cuộc gọi nội bộ đặc biệt; Tôi đang cố tìm chi tiết. – SLaks
Tôi nhớ đã đọc lại một lúc rằng "QCall" là một phần của clr.dll. Tôi, tuy nhiên, không biết nhiều hơn thế. 1 cho một câu hỏi tuyệt vời. – ahawker
Đây là một tính năng .NET 4 cụ thể. Bạn có thể nhận được một chút thông tin chi tiết từ Nguồn tham chiếu V4, xem mã nguồn cho System.Runtime.CompilerServices.Jithelpers.cs. Chuỗi xuất hiện hai lần trong clr.dll, dưới dạng __IsQCall và dưới dạng nội tuyến. Điều này mạnh mẽ giống như một cơ chế mở rộng ngoài MethodImplOptions.InternalCall, chứng minh nó là khó khăn mà không có mã nguồn CLR. –