Par exemple, cela est du fichier source .NET Framework UnsafeNativeMethods.cs:Lors de l'appel de fonctions API Windows à partir de C#, quelle source pour les signatures à approuver: code source .NET Framework ou PInvoke?
[DllImport(ExternDll.User32, ExactSpelling=true, CharSet=CharSet.Auto)]
public static extern bool GetWindowRect(HandleRef hWnd,
[In, Out] ref NativeMethods.RECT rect);
, ce qui est de PInvoke.Net:
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool GetWindowRect(HandleRef hwnd, out RECT lpRect);
Quelle est la bonne/meilleure signature pour cette fonction? (Un seul d'entre eux a
[return: MarshalAs(UnmanagedType.Bool)]
ou[In, Out] ref
, etc.)J'ai remarqué que dans la source .NET Framework fichiers de nombreux/la plupart des signatures ont
ExactSpelling=true, CharSet=CharSet.Auto
, mais ils ne sont pas PInvoke. Est-ce nécessaire?
+1 Pour une excellente explication. –
FxCop se plaindra si vous n'indiquez pas explicitement le type de marshalling où il est ambigu. C'est le cas pour bool (puisqu'il y a Win32 BOOL, C++ bool et VARIANT_BOOL) ou pour les chaînes. –