In .NET Framework 的 Windows API 代码包 http://archive.msdn.microsoft.com/WindowsAPICodePack,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 http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.methodimploptions.aspx值 说:
该调用是内部调用,即调用公共语言运行时内实现的方法。
文档MethodCodeType.Runtime http://msdn.microsoft.com/en-us/library/4k10sb5f.aspx says:
指定方法实现由运行时提供。
但是,如果我理解正确的话,这两种说法都不正确。IShellItem实施于shell32.dll http://msdn.microsoft.com/en-us/library/windows/desktop/bb761144%28v=vs.85%29.aspx,根据 MSDN。shell32.dll不是 CLR 的一部分。有趣的是,并非所有方法都有MethodImplAttribute
. IShellFolder
does, IShellLinkW
没有,IShellLibrary
does, IPersistStream
不等。
Why is MethodImplAttribute
应用于某些 COM Interop 接口?在这种情况下这意味着什么以及它如何修改互操作的行为?