In Windows API Code Pack for .NET Framework, molti metodi di interfacce COM interoperabilità sono decorati con MethodImplAttribute
, per esempio: valoreCosa fa MethodImplAttribute (InternalCall, Runtime) per i metodi delle interfacce di interoperabilità COM?
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);
documentazione per MethodImplOptions.InternalCall
dice:
La chiamata è interna, cioè, che definisce un metodo che è implementato all'interno del Common Language Runtime.
Documentazione per MethodCodeType.Runtime
dice:
Specifica che l'implementazione metodo viene fornito dal runtime.
Ma, se ho capito bene, nessuna delle due affermazioni è corretta. IShellItem
is implemented in shell32.dll, secondo MSDN. shell32.dll non è una parte di CLR. Ciò che è interessante, non tutti i metodi hanno il MethodImplAttribute
. IShellFolder
fa, IShellLinkW
non lo fa, IShellLibrary
fa, non lo fa IPersistStream
ecc
Perché MethodImplAttribute
applicata ad alcune delle interfacce COM Interop? Cosa significa in questo caso e in che modo modifica il comportamento di interop?