Partager via


Procédure pas à pas : échange de données entre des applications Smart Device et des applications de bureau

Mise à jour : novembre 2007

Dans cette procédure pas à pas, vous allez créer une application d'agent Smart Device, une application bureautique et un package de composants additionnels dans le magasin de données. L'application bureautique sera déployée et démarrera l'agent Smart Device, selon les informations contenues dans le package de composants additionnels. L'application bureautique échangera ensuite des données de paquets avec l'application d'agent Smart Device, puis s'arrêtera. Vous effectuerez les tâches suivantes :

  • créer une application d'agent Smart Device managée ;

  • créer un package de composants additionnels pour l'application d'agent Smart Device ;

  • créer une application bureautique qui démarre le package et communique avec l'agent Smart Device.

Remarque :

Il est possible que votre ordinateur affiche des noms ou des emplacements différents pour certains des éléments d'interface utilisateur Visual Studio dans les instructions suivantes. L'édition de Visual Studio dont vous disposez et les paramètres que vous utilisez déterminent ces éléments. Pour plus d'informations, consultez Paramètres Visual Studio.

Créer une application d'agent Smart Device

Pour créer une application d'agent Smart Device

  1. Démarrez Visual Studio.

  2. Dans le menu Fichier, pointez sur Nouveau, puis cliquez sur Fichier.

    La boîte de dialogue Nouveau projet s'affiche.

  3. (Visual C#) Développez Visual C#, puis cliquez sur Smart Device. Nommez le projet DeviceAgent et nommez le solution DataExchange. Cliquez sur OK.

    (Visual Basic) Développez Visual Basic, puis cliquez sur Smart Device. Nommez le projet DeviceAgent et nommez le solution DataExchange. Cliquez sur OK.

    La boîte de dialogue Ajouter un nouveau projet Smart Device apparaît.

  4. Sélectionnez Windows Mobile 5.0 Smartphone SDK pour la plateforme cible, cliquez sur Application console dans le volet Modèles, puis cliquez sur OK.

    Le nouveau projet DeviceAgent est affiché dans l'Explorateur de solutions.

  5. (Visual C#) Cliquez avec le bouton droit sur Références dans l'Explorateur de solutions, puis cliquez sur Ajouter une référence.

    (Visual Basic) Cliquez avec le bouton droit sur DeviceAgent dans l'Explorateur de solutions, puis cliquez sur Ajouter une référence.

    La boîte de dialogue Ajouter une référence s'affiche.

  6. Cliquez sur l'onglet Parcourir et accédez à lecteur:\Program Files\Common Files\Microsoft Shared\CoreCon\1.0\Target\Lib. Cliquez sur Microsoft.Smartdevice.DeviceAgentTransport.dll, puis cliquez sur OK.

    Une référence à Microsoft.Smartdevice.DeviceAgentTransport est ajoutée au projet.

  7. Double-cliquez sur Program.cs (C#) ou Module1.vb (Visual Basic) dans l'Explorateur de solutions pour ouvrir le fichier dans l'Éditeur de code, si ce n'est déjà fait.

  8. Positionnez le curseur au début du fichier.

  9. Insérez le code suivant :

    using Microsoft.SmartDevice.DeviceAgentTransport;
    
    Imports Microsoft.SmartDevice.DeviceAgentTransport
    
  10. Positionnez le curseur à l'intérieur de la méthode Main.

  11. Insérez le code suivant :

    string[] serviceids = {"A92866CA-AE83-4848-9438-501D8DB3CF25"};
    
    IDeviceAgentTransport transport = DeviceAgentTransportFactory.GetAgentTransport();
    
    // Don't keep it waiting.
    transport.AcknowledgeLaunch(1, serviceids);
    
    IDevicePacketStream packetstream;
    
    transport.AcceptConnectionEx(serviceids[0], out packetstream);
    IPacket packet;
    packet = PacketFactory.GetNewPacket();
    packet.WriteInt32(Environment.Version.Major);
    packet.WriteInt32(Environment.Version.Minor);
    packet.WriteInt32(Environment.Version.Build);
    packet.WriteInt32(Environment.Version.Revision);
    packetstream.Write(packet);
    
    Dim serviceids(0 To 0) As String
    serviceids(0) = "A92866CA-AE83-4848-9438-501D8DB3CF25"
    
    Dim transport As IDeviceAgentTransport = DeviceAgentTransportFactory.GetAgentTransport()
    
    ' Don't keep it waiting.
    transport.AcknowledgeLaunch(1, serviceids)
    
    Dim packetstream As IDevicePacketStream
    
    transport.AcceptConnectionEx(serviceids(0), packetstream)
    Dim packet As IPacket
    packet = PacketFactory.GetNewPacket()
    packet.WriteInt32(Environment.Version.Major)
    packet.WriteInt32(Environment.Version.Minor)
    packet.WriteInt32(Environment.Version.Build)
    packet.WriteInt32(Environment.Version.Revision)
    packetstream.Write(packet)
    

    Le code précédent crée un objet IDeviceAgentTransport, puis accepte une connexion à partir de l'ordinateur de bureau. Le programme envoie un paquet à l'ordinateur de bureau qui contient des informations sur la version du .NET Compact Framework.

  12. Dans le menu Générer, cliquez sur Générer la solution.

    Vous disposez maintenant d'une application Smart Device nommée DeviceAgent. Vous déploierez ultérieurement cette application sur l'appareil de type Smart Device.

Créez un package de composants additionnels dans le magasin de données.

Pour créer un package de composants additionnels dans le magasin de données

  1. Lancez le Bloc-notes.

  2. Copiez le texte ci-dessous dans le fichier Bloc-notes :

    <?xml version="1.0" standalone="no"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
      <xsl:template match="/">
        <ADDONCONTAINER>
          <ADDON>
            <PACKAGECONTAINER>
              <PACKAGE ID="" NAME="DeviceAgent">
                <PROPERTYCONTAINER />
                <PACKAGETYPECONTAINER>
                  <PACKAGETYPE Name="ARMV4I" ID="ARMV4I" Protected="True">
                    <PROPERTYCONTAINER>
                      <PROPERTY ID="RemotePath" Protected="True">%CSIDL_PROGRAM_FILES%\DeviceAgent</PROPERTY>
                      <PROPERTY ID="RootPath" Protected="True">C:\DataExchange\DeviceAgent\bin\Debug</PROPERTY>
                      <PROPERTY ID="CPU" Protected="True">ARMV4I</PROPERTY>
                      <PROPERTY ID="Host" Protected="True">DeviceAgent</PROPERTY>
                    </PROPERTYCONTAINER>
                    <FILECONTAINER>
                      <FILE ID="DeviceAgent.exe" />
                      <FILE ID="Microsoft.Smartdevice.DeviceAgentTransport.dll" />
                      <FILE ID="DeviceAgentTransport.dll" />
                    </FILECONTAINER>
                  </PACKAGETYPE>
                </PACKAGETYPECONTAINER>
              </PACKAGE>
            </PACKAGECONTAINER>
          </ADDON>
        </ADDONCONTAINER>
      </xsl:template>
    </xsl:stylesheet>
    
  3. Dans Visual Studio, dans le menu Outils, cliquez sur Create GUID.

    La boîte de dialogue Create GUID s'affiche.

  4. Sélectionnez Registry Format, cliquez sur Copier, puis sur Quitter.

  5. Collez le GUID dans le Bloc-notes dans l'attribut ID de la balise Package et supprimez les accolades qui entourent le GUID.

    Par exemple, <Package ID="9C50B38D-4259-40b3-AE9F-C5887DD898FF" Name="DeviceAgent">.

  6. Modifiez la valeur de la balise <PROPERTY ID="RootPath" Protected="True"> selon le dossier où se trouve DeviceAgent.exe.

    Par exemple, <PROPERTY ID="RootPath" Protected="True">c:\DataExchange\DeviceAgent\bin\debug</PROPERTY>.

    Remarque :

    Pour déterminer l'emplacement de DeviceAgent.exe, cliquez avec le bouton droit sur le projet DeviceAgent dans l'Explorateur de solutions puis cliquez sur Propriétés. Cliquez sur l'onglet Générer puis sur Parcourir à côté de Chemin de sortie.

  7. Copiez la bibliothèque lecteur:\Program Files\Common Files\Microsoft Shared\CoreCon\1.0\Target\wce400\armv4i\DeviceAgentTransport.dll vers le chemin d'accès spécifié sous le chemin d'accès racine.

    Remarque :

    Cette étape est importante car l'assembly Microsoft.Smartdevice.DeviceAgentTransport.dll utilise la bibliothèque DeviceAgentTransport.dll. Les deux fichiers doivent être déployés avec notre application.

  8. Dans le Bloc-notes, enregistrez le fichier.

    \ProgramData\Microsoft\corecon\1.0\addons\package.xsl (Windows Vista)

    \Documents and Settings\All Users\Application Data\Microsoft\corecon\1.0\addons\package.xsl (Autre)

    Remarque :

    Si le nom de fichier package.xsl est déjà utilisé, utilisez un autre nom. Le nom de fichier n'est pas important parce que tous les fichiers du dossier sont traités comme des packages de composants additionnels.

  9. Quittez et redémarrez Visual Studio.

    Visual Studio charge le package de composants additionnels dans dossier lorsqu'il est démarré. Si Visual Studio démarre correctement, le package est exempt d'erreurs de syntaxe.

    Le magasin de données contient maintenant un package de composants additionnels portant le nom DeviceAgent et un ID généré de façon unique par Visual Studio. Lorsque le package est déployé, l'API de connectivité Smart Device copie trois fichiers du dossier de sortie du projet DeviceAgent vers le répertoire lecteur:\Program Files\DeviceAgent de l'appareil. Il exécute ensuite DeviceAgent.exe sur l'appareil.

Créer une application bureautique qui déploie le package et communique avec l'agent Smart Device

Pour créer une application bureautique qui déploie le package et communique avec l'agent Smart Device

  1. Dans Visual Studio, dans le menu Fichier, pointez sur Ouvrir, puis cliquez sur Projet/Solution.

    La boîte de dialogue Ouvrir un projet s'affiche.

  2. Naviguez jusqu'à la solution DataExchange.sln, cliquez sur celle-ci, puis cliquez Ouvrir.

    L'Explorateur de solutions apparaît avec l'application DeviceAgent.

  3. Dans le menu Fichier, pointez sur Ajouter, puis cliquez sur Nouveau projet.

    La boîte de dialogue Nouveau projet s'affiche.

  4. (Visual C#) Développez Visual C# puis cliquez sur Windows.

    (Visual Basic) Développez Visual Basic puis cliquez sur Windows.

  5. Dans le volet Modèles, cliquez sur Application console.

  6. Nommez le projet DesktopSide puis cliquez sur OK.

    L'Explorateur de solutions contient deux projets : DeviceAgent et DesktopSide.

  7. Cliquez avec le bouton droit sur le projet DesktopSide dans l'Explorateur de solutions, puis cliquez sur Définir comme projet de démarrage.

  8. (Visual C#) Cliquez avec le bouton droit sur Références dans le projet DesktopSide dans l'Explorateur de solutions puis cliquez sur Ajouter une référence.

    (Visual Basic) Cliquez avec le bouton droit sur DesktopSide dans l'Explorateur de solutions, puis cliquez sur Ajouter une référence.

    La boîte de dialogue Ajouter une référence s'affiche.

  9. Cliquez sur l'onglet Parcourir, naviguez jusqu'à lecteur:\Program Files\Common Files\Microsoft Shared\CoreCon\1.0\Bin, click Microsoft.Smartdevice.Connectivity.dll, puis cliquez sur OK.

    Une référence à Microsoft.Smartdevice.Connectivity est ajoutée au projet DesktopSide.

  10. Double-cliquez sur Program.cs (C#) ou Module1.vb (Visual Basic) dans le projet DesktopSide dans l'Explorateur de solutions pour ouvrir le fichier dans l'Éditeur de code, si ce n'est déjà fait.

  11. Positionnez le curseur au début du fichier.

  12. Insérez le code suivant :

    using Microsoft.SmartDevice.Connectivity;
    using System.Collections.ObjectModel;
    
    Imports Microsoft.SmartDevice.Connectivity
    Imports System.Collections.ObjectModel
    
  13. Positionnez le curseur à l'intérieur de la méthode Main.

  14. Insérez le code suivant :

    // Change the locale ID to correspond to your installation of Visual Studio.
    DatastoreManager dsmgr = new DatastoreManager(1033);
    Platform platform = GetPlatformByName("Windows Mobile 5.0 Smartphone SDK", dsmgr);
    Device emulator = platform.GetDevice(platform.GetDefaultDeviceId());
    emulator.Connect();
    // Add the GUID of your package below.
    RemoteAgent ra = emulator.GetRemoteAgent(new ObjectId(""));
    ra.Start("command line argument");
    DevicePacketStream ps = ra.CreatePacketStream(new ObjectId("A92866CA-AE83-4848-9438-501D8DB3CF25"));
    Packet packet;
    packet = new Packet();
    while (ps.IsConnected())
    {
        if (ps.IsPacketAvailable())
        {
            packet = ps.Read();
            while (!packet.IsEndOfPacket())
            {
                switch (packet.ReadDataType())
                {
                    case DataType.Int32Type:
                        Console.WriteLine("Int32Type:  " + packet.ReadInt32().ToString());
                        break;
                    case DataType.StringType:
                        Console.WriteLine("String:  " + packet.ReadString());
                        break;
                    default:
                        break;
                }
            }
            break;
        }
    }
    Console.Read();
    
    ' Change the locale ID to correspond to your installation of Visual Studio.
    Dim dsmgr As New DatastoreManager(1033)
    Dim platform As Platform = GetPlatformByName("Windows Mobile 5.0 Smartphone SDK", dsmgr)
    Dim emulator As Device = platform.GetDevice(platform.GetDefaultDeviceId())
    emulator.Connect()
    ' Add the GUID of your package below.
    Dim ra As RemoteAgent = emulator.GetRemoteAgent(New ObjectId(""))
    ra.Start("command line argument")
    Dim ps As DevicePacketStream = ra.CreatePacketStream(New ObjectId("A92866CA-AE83-4848-9438-501D8DB3CF25"))
    Dim packet As Packet
    packet = New Packet()
    While ps.IsConnected()
        If ps.IsPacketAvailable() Then
            packet = ps.Read()
            While Not packet.IsEndOfPacket()
                Select Case packet.ReadDataType()
                    Case DataType.Int32Type
                        Console.WriteLine("Int32Type:  " + packet.ReadInt32().ToString())
                    Case DataType.StringType
                        Console.WriteLine("String:  " + packet.ReadString())
                    Case Else
                End Select
            End While
            Exit While
        End If
    End While
    Console.Read()
    

    Le code précédent se connecte à un émulateur Windows Mobile 5.0 et déploie l'agent distant sur l'appareil. Puis il établit une connexion avec l'appareil et lit des données de paquet. Les informations lues sur l'appareil sont affichées dans la console.

  15. Ajoutez l'ID de votre package à emulator.GetRemoteAgent(new ObjectId("")).

    Par exemple : emulator.GetRemoteAgent(new ObjectId("F85E57BA-5AE9-4FF7-8433-6AB7D991D034"))

  16. Collez la méthode d'assistance suivante sous la méthode Main :

    // Return a platform if the supplied name can be found in the datastore.  
    // Return null pointer if platform cannot be found.
    private static Platform GetPlatformByName(string p, DatastoreManager dsmgr)
    {
        // Get all platforms in the datastore.
        Collection<Platform> platforms = dsmgr.GetPlatforms();
    
        // Find the platform whose name matches the parameter.
        foreach (Platform platform in platforms)
        {
            if (platform.Name == p) return platform;
        }
        return null;
    }
    
    ' Return a platform if the supplied name can be found in the datastore.  
    ' Return null pointer if platform cannot be found.
    Private Function GetPlatformByName(ByVal p As String, ByVal dsmgr As DatastoreManager) As Platform 
        ' Get all platforms in the datastore.
        Dim platforms As Collection(Of Platform) = dsmgr.GetPlatforms()
    
        ' Find the platform whose name matches the parameter.
        Dim platform As Platform
        For Each platform In  platforms
            If platform.Name = p Then
                Return platform
            End If
        Next platform
        Return Nothing
    
    End Function 'GetPlatformByName
    
  17. Appuyez sur F5 pour déboguer le projet DesktopSide.

    DesktopSide se connecte et démarre l'émulateur si celui-ci n'est pas déjà démarré. Il déploie ensuite le package et démarre l'application DeviceAgent. DesktopSide et DeviceAgent échangent alors des informations de paquet et les affichent pour l'utilisateur.

Voir aussi

Concepts

Contrôle des appareils avec les API de connectivité Smart Device

Vue d'ensemble des packages de composants additionnels

Autres ressources

Référence de l'API de connectivité des appareils de type Smart Device

Exemples d'API de connectivité Smart Device