Trong Windows API Code Pack for .NET Framework, nhiều phương pháp của các giao diện COM Interop được trang trí với MethodImplAttribute
, ví dụ: giá trịMethodImplAttribute (InternalCall, Runtime) làm gì cho các phương thức của giao diện COM Interop?
internal interface IShellItem
{
[PreserveSig]
[MethodImpl(
MethodImplOptions.InternalCall,
MethodCodeType = MethodCodeType.Runtime)]
HResult BindToHandler(
[In] IntPtr pbc, [In] ref Guid bhid, [In] ref Guid riid,
[Out, MarshalAs(UnmanagedType.Interface)] out IShellFolder ppv);
Tài liệu cho MethodImplOptions.InternalCall
nói:
Cuộc gọi là nội bộ, có nghĩa là, nó gọi một phương pháp được triển khai trong thời gian chạy ngôn ngữ chung.
Tài liệu cho MethodCodeType.Runtime
nói:
Chỉ định rằng việc thực hiện phương pháp được cung cấp bởi bộ thực thi.
Nhưng, nếu tôi hiểu chính xác, không phải câu nào là chính xác. IShellItem
is implemented in shell32.dll, theo MSDN. shell32.dll không phải là một phần của CLR. Điều thú vị, không phải tất cả các phương pháp đều có MethodImplAttribute
. IShellFolder
làm, IShellLinkW
không, IShellLibrary
làm, IPersistStream
không, vv
Tại sao MethodImplAttribute
áp dụng cho một số các giao diện COM Interop? Nó có ý nghĩa gì trong trường hợp này và nó thay đổi hành vi của interop như thế nào?