In Windows API Code Pack for .NET Framework sind viele Methoden der COM-Interop-Schnittstellen mit MethodImplAttribute
zum Beispiel eingerichtet:Was macht MethodImplAttribute (InternalCall, Runtime) für Methoden von COM-Interop-Schnittstellen?
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);
Dokumentation für MethodImplOptions.InternalCall
Wert sagt:
Der Anruf intern, das heißt, nennt es ein Verfahren das ist in der Common Language Runtime implementiert.
Dokumentation für MethodCodeType.Runtime
sagt:
Gibt an, dass das Verfahren die Umsetzung von der Laufzeit zur Verfügung gestellt wird.
Aber, wenn ich richtig verstehe, ist keine Aussage richtig. IShellItem
is implemented in shell32.dll, nach MSDN. shell32.dll ist kein Teil von CLR. Was interessant ist, haben nicht alle Methoden die MethodImplAttribute
. IShellFolder
tut, IShellLinkW
nicht, IShellLibrary
tut, IPersistStream
nicht usw.
Warum MethodImplAttribute
einige der COM-Interop-Schnittstellen angewendet wird? Was bedeutet es in diesem Fall und wie verändert es das Verhalten von Interop?