在Windows API Code Pack for .NET Framework的COM互操作接口的許多方法與MethodImplAttribute
裝飾,例如:MethodImplAttribute(InternalCall,Runtime)對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);
的文檔MethodImplOptions.InternalCall
值說:
呼叫是內部的,也就是說,它調用一個方法這是在公共語言運行庫中實現的。
爲MethodCodeType.Runtime
文件說:
指定此方法實現由運行時提供。
但是,如果我理解正確,兩個陳述都是正確的。根據MSDN,IShellItem
is implemented in shell32.dll。 shell32.dll不是CLR的一部分。有趣的是,並非所有的方法都有MethodImplAttribute
。 IShellFolder
呢,IShellLinkW
沒有,IShellLibrary
呢,IPersistStream
沒有等
爲什麼被應用到一些COM互操作接口MethodImplAttribute
?這在這種情況下意味着什麼,它如何修改interop的行爲?