Coach Windows Mobile

Bienvenue dans l'atelier "P/Invoke et interaction avec les API natives" du Coach Windows Mobile !

Dans ce tutoriel, vous :

  • Découvrirez ce que sont les Services Platform Invocation (P/Invoke).
  • Apprendrez à appeler des fonctions non implémentées dans le Compact Framework.

Pour compléter ce tutoriel vous devez :

  • Disposer du logiciel Visual Studio 2008. Vous pouvez télécharger gratuitement une version d’évaluation sur cette page.

Le cours et les sources de cet atelier sont disponibles en téléchargement gratuit.


Téléchargez gratuitement l'intégralité de cet atelier !

                   

P/Invoke et interaction avec les API natives

Le Compact Framework est déjà très complet, et il s’améliore à chaque nouvelle version. Mais parfois certaines fonctions doivent être appelées au niveau du système car il n’existe aucun moyen de les atteindre en code managé.

Services Platform Invocation (P/Invoke)

Les services Platform Invocation permettent à du code managé (.NET) d'appeler des fonctions non managées implémentées dans des DLL natives (non ActiveX). D'un point de vue sémantique, vous pouvez utiliser P/Invoke de la même façon que dans l'ensemble du .NET Framework mais en environnement .NET Compact Framework la prise en charge est limitée pour les objets et les types pouvant être marshallés entre un code managé et un code non managé.

P/Invoke est hébergé dans l'espace de noms System.Runtime.InteropService. Dans votre code d'application, déclarez la fonction non gérée que vous souhaitez appeler via l'attribut DllImport. La description inclut le nom du module (nom du fichier DLL spécifique), le nom du point d'entrée (nom de la fonction non gérée que vous appelez), la convention d'appel et l'indicateur SetLastError. La convention d'appel décrit la façon dont les paramètres sont transmis vers la méthode non gérée. Dans .NET Compact Framework, la seule convention d'appel prise en charge est la convention WinAPI qui correspond à la convention C++ __cdecl. Par défaut, C# définit l'indicateur SetLastError sur faux. En le définissant sur vrai, vous pouvez appeler Marshal.GetLastWin32Error pour extraire la dernière erreur non gérée rencontrée.

Par exemple, pour appeler la fonction SendMessage de la DLL non managée coredll.dll, vous devez inclure le code suivant dans votre projet :

Visual Basic

<DllImport("coredll.dll")> _
Private Function SendMessage( _
  ByVal hWnd As IntPtr, _
  ByVal wMsg As Int32, _
  ByVal wParam As Int32, _
  ByVal lParam As Int32) As Int32
End Function

Visual C#

[DllImport("coredll.dll")]
private extern Int32 SendMessage(
  IntPtr hWnd, 
  Int32 wMsg,
  Int32 wParam,
  Int32 lParam);

Vous désirez la suite ? Le cours et les sources de cet atelier sont disponibles en téléchargement gratuit.


Téléchargez gratuitement l'intégralité de cet atelier !

Version d’évaluation de Visual Studio 2008
SDK Windows Mobile 6.x
L'atelier : cours et code source



Les vidéos « 5 minutes pour comprendre Windows Mobile »
Les webcasts Windows Mobile
Le blog de Pierre Cauchois
Le site CodePPC
Le forum Windows Mobile et Embarqué