Поделиться через


Пошаговое руководство. Обмен данными между приложениями для настольного ПК и приложениями устройства

Обновлен: Ноябрь 2007

В этом пошаговом руководстве будет создано приложение агента устройства, приложение для настольных компьютеров и пакет надстройки в хранилище данных. Приложение для настольного компьютера развернет и запустит агент устройства в зависимости от сведений в пакете надстройки. Затем приложение для настольного компьютера начнет обмениваться пакетными данными с приложением агента устройства, после чего прервет работу. На этом занятии будут выполняться следующие задачи.

  • Создание управляемого приложения агента устройства.

  • Создание пакета надстройки для приложения агента устройства.

  • Создание приложения для настольного компьютера, которое запускает пакет и взаимодействует с агентом устройства.

Bb546002.alert_note(ru-ru,VS.90).gifПримечание.

На вашем компьютере названия некоторых элементов интерфейса пользователя Visual Studio или их расположение могут отличаться от указанных в нижеследующих инструкциях. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. Дополнительные сведения см. в разделе Параметры Visual Studio.

Создание приложения агента устройства

Чтобы создать приложение агента устройства

  1. Запустите среду Visual Studio.

  2. В меню Файл выберите команду Создать и щелкните Проект.

    Откроется диалоговое окно Создать проект.

  3. (Visual C#) Разверните узел Visual C# и щелкните пункт Смарт-устройство. Назовите проект DeviceAgent, а решение — DataExchange. Нажмите кнопку OК.

    (Visual Basic) Разверните узел Visual Basic и щелкните пункт Смарт-устройство. Назовите проект DeviceAgent, а решение — DataExchange. Нажмите кнопку OК.

    Откроется диалоговое окно Добавление нового проекта интеллектуального устройства.

  4. Выберите Windows Mobile 5.0 Smartphone SDK для конечной платформы, щелкните Приложение консоли в области Шаблоны и нажмите кнопку ОК.

    Новый проект DeviceAgent будет отображен в обозревателе решений.

  5. (Visual C#) В обозревателе решений щелкните правой кнопкой мыши узел Ссылки и выберите команду Добавить ссылку.

    (Visual Basic) В Обозревателе решений щелкните правой кнопкой мыши узел DeviceAgent и выберите команду Добавить ссылку.

    Откроется диалоговое окно Добавление ссылки.

  6. Щелкните вкладку Обзор и перейдите к следующему расположению: диск:\Program Files\Common Files\Microsoft Shared\CoreCon\1.0\Target\Lib. Щелкните файл Microsoft.Smartdevice.DeviceAgentTransport.dll и нажмите кнопку ОК.

    Ссылка на библиотеку Microsoft.Smartdevice.DeviceAgentTransport будет добавлена в проект.

  7. Дважды щелкните Program.cs (C#) или Module1.vb (Visual Basic) в обозревателе решений для открытия файла в редакторе кода, если этот файл еще не открыт.

  8. Установите курсор в самом начале файла.

  9. Вставьте следующий код:

    using Microsoft.SmartDevice.DeviceAgentTransport;
    
    Imports Microsoft.SmartDevice.DeviceAgentTransport
    
  10. Поместите курсор в методе Main.

  11. Вставьте следующий код:

    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)
    

    Предыдущий код служил для создания объекта IDeviceAgentTransport с последующим принятием подключения с настольного компьютера. Программа отправляет пакет настольному компьютеру, который содержит сведения о версии .NET Compact Framework.

  12. В меню Построение выберите команду Построить решение.

    Теперь имеется приложение смарт-устройства, которое называется DeviceAgent. Позже это приложение будет развернуто на устройстве.

Создайте пакет надстройки в хранилище данных.

Чтобы создать пакет надстройки в хранилище данных

  1. Запустите приложение "Блокнот".

  2. Скопируйте приведенный ниже код в файл "Блокнота".

    <?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. В Visual Studio в меню Сервис выберите команду Создать GUID.

    Будет открыто диалоговое окно Создать GUID.

  4. Выберите пункт Формат реестра, щелкните команду Копировать, затем Выход.

  5. Вставьте идентификатор GUID в "Блокнот" в атрибут ID тега Package и удалите окружающие его фигурные скобки.

    Например, <Package ID="9C50B38D-4259-40b3-AE9F-C5887DD898FF" Name="DeviceAgent">.

  6. Измените значение тега <PROPERTY ID="RootPath" Protected="True"> на папку, в которой расположен DeviceAgent.exe.

    Например, <PROPERTY ID="RootPath" Protected="True">c:\DataExchange\DeviceAgent\bin\debug</PROPERTY>.

    Bb546002.alert_note(ru-ru,VS.90).gifПримечание.

    Чтобы определить расположение DeviceAgent.exe, щелкните правой кнопкой мыши проект DeviceAgent в обозревателе решений и выберите пункт Свойства. Щелкните вкладку Построить и нажмите кнопку Обзор рядом с пунктом Выходной путь.

  7. Скопируйте библиотеку диск:\Program Files\Common Files\Microsoft Shared\CoreCon\1.0\Target\wce400\armv4i\DeviceAgentTransport.dll в расположение, указанное под корневым путем.

    Bb546002.alert_note(ru-ru,VS.90).gifПримечание.

    Этот этап является важным, потому что сборка Microsoft.Smartdevice.DeviceAgentTransport.dll использует библиотеку DeviceAgentTransport.dll. Оба файла должны быть развернуты вместе с приложением.

  8. Сохраните файл в "Блокноте".

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

    \Documents and Settings\All Users\Application Data\Microsoft\corecon\1.0\addons\package.xsl (другие ОС)

    Bb546002.alert_note(ru-ru,VS.90).gifПримечание.

    Если файл с именем package.xsl уже используется, укажите другое имя. Имя файла не имеет значения, потому что все файлы в этой папке обрабатываются как пакеты надстроек.

  9. Закройте и перезапустите среду Visual Studio.

    Среда Visual Studio загружает папку пакетов надстроек при загрузке. Если Visual Studio запускается правильно, в пакете отсутствуют синтаксические ошибки.

    Теперь хранилище данных содержит пакет надстройки с именем DeviceAgent и уникальный идентификатор ID, который был создан Visual Studio. При развертывании пакета интерфейс API связи со смарт-устройством скопирует три файла из папки выходных данных проекта DeviceAgent в каталог устройства диск:\Program File\DeviceAgent. Затем на устройстве будет запущена программа DeviceAgent.exe.

Создание приложения для настольного компьютера, которое разворачивает пакет и взаимодействует с агентом устройства

Чтобы создать приложение для настольного компьютера, которое разворачивает пакет и взаимодействует с агентом устройства

  1. В меню Visual StudioФайл выберите пункт Открыть и пункт Решение или проект.

    Откроется диалоговое окно Открыть проект.

  2. Перейдите к решению DataExchange.sln, щелкните его и нажмите кнопку Открыть.

    Будет отображен обозреватель решений с приложением DeviceAgent.

  3. В меню Файл выберите команду Добавить, затем выберите пункт Создать проект.

    Откроется диалоговое окно Создать проект.

  4. (Visual C#) Разверните узел Visual C# и выберите Windows.

    (Visual Basic) Разверните узел Visual Basic и выберите Windows.

  5. В области Шаблоны щелкните Консольное приложение.

  6. Назовите проект DesktopSide и нажмите кнопку ОК.

    Обозреватель решений содержит два проекта: DeviceAgent и DesktopSide.

  7. Щелкните правой кнопкой мыши проект DesktopSide в обозревателе решений и выберите пункт Назначить запускаемым проектом.

  8. (Visual C#) В обозревателе решений щелкните правой кнопкой мыши узел Ссылки в проекте DesktopSide и выберите Добавить ссылку.

    (Visual Basic) В обозревателе решений щелкните правой кнопкой мыши узел DesktopSide и выберите команду Добавить ссылку.

    Откроется диалоговое окно Добавление ссылки.

  9. Щелкните вкладку Обзор, перейдите к файлу диск:\Program Files\Common Files\Microsoft Shared\CoreCon\1.0\Bin, click Microsoft.Smartdevice.Connectivity.dll и нажмите кнопку ОК.

    Ссылка на библиотеку Microsoft.Smartdevice.Connectivity будет добавлена в проект DesktopSide.

  10. Дважды щелкните Program.cs (C#) или Module1.vb (Visual Basic) в проекте DesktopSide в обозревателе решений для открытия файла в редакторе кода, если этот файл еще не открыт.

  11. Установите курсор в самом начале файла.

  12. Вставьте следующий код:

    using Microsoft.SmartDevice.Connectivity;
    using System.Collections.ObjectModel;
    
    Imports Microsoft.SmartDevice.Connectivity
    Imports System.Collections.ObjectModel
    
  13. Поместите курсор в методе Main.

  14. Вставьте следующий код:

    // 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()
    

    Ранее приведенный код подключается к эмулятору Windows Mobile 5.0 и разворачивает удаленный агент на устройстве. Затем он устанавливает подключение к устройству и считывает данные пакета. Сведения, считанные с устройства, отображаются в консоли.

  15. Добавьте идентификатор пакета в emulator.GetRemoteAgent(new ObjectId("")).

    Например, emulator.GetRemoteAgent(new ObjectId("F85E57BA-5AE9-4FF7-8433-6AB7D991D034")).

  16. Вставьте следующий вспомогательный метод в метод 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. Нажмите клавишу F5 для отладки проекта DesktopSide.

    DesktopSide подключается и запускает эмулятор устройства, если он еще не запущен. Затем эта программа развертывает пакет и запускает приложение DeviceAgent. Затем DesktopSide и DeviceAgent обмениваются пакетными сведениями и отображают их для пользователя.

См. также

Основные понятия

Управление устройствами с помощью API подключения интеллектуальных устройств

Общие сведения о пакетах надстроек

Другие ресурсы

Справочник по интерфейсам API подключения к смарт-устройствам

Примеры использования API подключения смарт-устройств