« PInvoke » : différence entre les versions
De Banane Atomic
Aller à la navigationAller à la recherche
Aucun résumé des modifications |
Aucun résumé des modifications |
||
Ligne 1 : | Ligne 1 : | ||
[http://morpheus.developpez.com/dlldotnet Doc] | [[Category:CSharp]] | ||
= Liens = | |||
* [http://morpheus.developpez.com/dlldotnet Doc] | |||
=Obtenir les fonctions d'un DLL C/C++= | = Obtenir les fonctions d'un DLL C/C++ = | ||
Utilisez [http://www.nirsoft.net/utils/dll_export_viewer.html DLL Export Viewer] ou [http://www.smidgeonsoft.prohosting.com/pebrowse-pro-file-viewer.html PEBrowse] pour afficher les méthodes exportées par cette DLL. | Utilisez [http://www.nirsoft.net/utils/dll_export_viewer.html DLL Export Viewer] ou [http://www.smidgeonsoft.prohosting.com/pebrowse-pro-file-viewer.html PEBrowse] pour afficher les méthodes exportées par cette DLL. | ||
=Obtenir les signatures des fonctions C/C++= | = Obtenir les signatures des fonctions C/C++ = | ||
*Consultez le fichier .h | * Consultez le fichier .h | ||
*DLL Windows : [http://msdn.microsoft.com/en-us/library/windows/desktop/ff657751%28v=VS.85%29.aspx Windows Application UI Development] | * DLL Windows : [http://msdn.microsoft.com/en-us/library/windows/desktop/ff657751%28v=VS.85%29.aspx Windows Application UI Development] | ||
=Convertir les signatures C/C++ en signatures C#= | = Convertir les signatures C/C++ en signatures C# = | ||
[http://clrinterop.codeplex.com/releases/view/14120 PInvoke Interop Assistant] | [http://clrinterop.codeplex.com/releases/view/14120 PInvoke Interop Assistant] | ||
Onglet "SigImp Translate Snippet" → collez la signature et les structures C/C++ dans "Native Code Snippet". | Onglet "SigImp Translate Snippet" → collez la signature et les structures C/C++ dans "Native Code Snippet". | ||
=Obtenir les signatures .NET= | = Obtenir les signatures .NET = | ||
[http://www.pinvoke.net/index.aspx PINVOKE .NET] | [http://www.pinvoke.net/index.aspx PINVOKE .NET] | ||
=Exemple= | = Exemple = | ||
Prenons la DLL « C:\Windows\System32\user32.dll » :<br/> | Prenons la DLL « C:\Windows\System32\user32.dll » :<br/> | ||
Voici les exports donnés par PE Browse :<br/> | Voici les exports donnés par PE Browse :<br/> | ||
Ligne 23 : | Ligne 25 : | ||
Ne possédant pas le fichier .h, une recherche sur internet : InvalidateRect + MSDN nous donne cette signature : | Ne possédant pas le fichier .h, une recherche sur internet : InvalidateRect + MSDN nous donne cette signature : | ||
<kode lang="cpp"> | |||
< | |||
BOOL InvalidateRect( | BOOL InvalidateRect( | ||
HWND hWnd, | HWND hWnd, | ||
Ligne 32 : | Ligne 32 : | ||
BOOL bErase | BOOL bErase | ||
); | ); | ||
</ | </kode> | ||
L'outil "PInvoke Interop Assistant" génère le code suivant : | L'outil "PInvoke Interop Assistant" génère le code suivant : | ||
<kode lang="csharp"> | |||
< | |||
[StructLayout(LayoutKind.Sequential)] | [StructLayout(LayoutKind.Sequential)] | ||
public struct RECT { | public struct RECT { | ||
Ligne 51 : | Ligne 48 : | ||
[return: MarshalAs(UnmanagedType.Bool)] | [return: MarshalAs(UnmanagedType.Bool)] | ||
public static extern bool InvalidateRect(IntPtr hWnd, ref RECT lpRect, [MarshalAs(UnmanagedType.Bool)] bool bErase); | public static extern bool InvalidateRect(IntPtr hWnd, ref RECT lpRect, [MarshalAs(UnmanagedType.Bool)] bool bErase); | ||
</ | </kode> | ||
Signatures récupérés sur internet : | Signatures récupérés sur internet : | ||
<kode lang="csharp"> | |||
< | |||
// PINVOKE.NET | // PINVOKE.NET | ||
static extern bool InvalidateRect(IntPtr hWnd, IntPtr lpRect, bool bErase); | static extern bool InvalidateRect(IntPtr hWnd, IntPtr lpRect, bool bErase); | ||
Ligne 65 : | Ligne 58 : | ||
[return: MarshalAs(UnmanagedType.Bool)] | [return: MarshalAs(UnmanagedType.Bool)] | ||
public static extern bool InvalidateRect(IntPtr hWnd, IntPtr rect, [MarshalAs(UnmanagedType.Bool)] bool erase); | public static extern bool InvalidateRect(IntPtr hWnd, IntPtr rect, [MarshalAs(UnmanagedType.Bool)] bool erase); | ||
</ | </kode> | ||
Dernière version du 12 avril 2020 à 21:39
Liens
Obtenir les fonctions d'un DLL C/C++
Utilisez DLL Export Viewer ou PEBrowse pour afficher les méthodes exportées par cette DLL.
Obtenir les signatures des fonctions C/C++
- Consultez le fichier .h
- DLL Windows : Windows Application UI Development
Convertir les signatures C/C++ en signatures C#
PInvoke Interop Assistant Onglet "SigImp Translate Snippet" → collez la signature et les structures C/C++ dans "Native Code Snippet".
Obtenir les signatures .NET
Exemple
Prenons la DLL « C:\Windows\System32\user32.dll » :
Voici les exports donnés par PE Browse :
- ...
- InvalidateRect (1957) (0x00021381)
- ...
Ne possédant pas le fichier .h, une recherche sur internet : InvalidateRect + MSDN nous donne cette signature :
BOOL InvalidateRect( HWND hWnd, const RECT* lpRect, BOOL bErase ); |
L'outil "PInvoke Interop Assistant" génère le code suivant :
[StructLayout(LayoutKind.Sequential)] public struct RECT { public int left; public int top; public int right; public int bottom; } [DllImport("user32.dll", EntryPoint="InvalidateRect")] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool InvalidateRect(IntPtr hWnd, ref RECT lpRect, [MarshalAs(UnmanagedType.Bool)] bool bErase); |
Signatures récupérés sur internet :
// PINVOKE.NET static extern bool InvalidateRect(IntPtr hWnd, IntPtr lpRect, bool bErase); [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool InvalidateRect(IntPtr hWnd, IntPtr rect, [MarshalAs(UnmanagedType.Bool)] bool erase); |