在Windows API Code Pack for .NET Framework中,COM Interop 接口的许多方法都用 装饰MethodImplAttribute,例如:
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说:
调用是内部的,也就是说,它调用的是在公共语言运行库中实现的方法。
指定方法实现由运行时提供。
但是,如果我理解正确,这两种说法都不正确。根据 MSDN,IShellItem在shell32.dll中实现。shell32.dll不是 CLR 的一部分。有趣的是,并非所有方法都有MethodImplAttribute. IShellFolder做,IShellLinkW不做,IShellLibrary不做,IPersistStream不做等等。
为什么MethodImplAttribute应用于某些 COM Interop 接口?在这种情况下是什么意思,它如何修改互操作的行为?