Пошаговое руководство. Обмен данными между приложениями для настольного ПК и приложениями устройства
Обновлен: Ноябрь 2007
В этом пошаговом руководстве будет создано приложение агента устройства, приложение для настольных компьютеров и пакет надстройки в хранилище данных. Приложение для настольного компьютера развернет и запустит агент устройства в зависимости от сведений в пакете надстройки. Затем приложение для настольного компьютера начнет обмениваться пакетными данными с приложением агента устройства, после чего прервет работу. На этом занятии будут выполняться следующие задачи.
Создание управляемого приложения агента устройства.
Создание пакета надстройки для приложения агента устройства.
Создание приложения для настольного компьютера, которое запускает пакет и взаимодействует с агентом устройства.
![]() |
---|
На вашем компьютере названия некоторых элементов интерфейса пользователя Visual Studio или их расположение могут отличаться от указанных в нижеследующих инструкциях. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. Дополнительные сведения см. в разделе Параметры Visual Studio. |
Создание приложения агента устройства
Чтобы создать приложение агента устройства
Запустите среду Visual Studio.
В меню Файл выберите команду Создать и щелкните Проект.
Откроется диалоговое окно Создать проект.
(Visual C#) Разверните узел Visual C# и щелкните пункт Смарт-устройство. Назовите проект DeviceAgent, а решение — DataExchange. Нажмите кнопку OК.
(Visual Basic) Разверните узел Visual Basic и щелкните пункт Смарт-устройство. Назовите проект DeviceAgent, а решение — DataExchange. Нажмите кнопку OК.
Откроется диалоговое окно Добавление нового проекта интеллектуального устройства.
Выберите Windows Mobile 5.0 Smartphone SDK для конечной платформы, щелкните Приложение консоли в области Шаблоны и нажмите кнопку ОК.
Новый проект DeviceAgent будет отображен в обозревателе решений.
(Visual C#) В обозревателе решений щелкните правой кнопкой мыши узел Ссылки и выберите команду Добавить ссылку.
(Visual Basic) В Обозревателе решений щелкните правой кнопкой мыши узел DeviceAgent и выберите команду Добавить ссылку.
Откроется диалоговое окно Добавление ссылки.
Щелкните вкладку Обзор и перейдите к следующему расположению: диск:\Program Files\Common Files\Microsoft Shared\CoreCon\1.0\Target\Lib. Щелкните файл Microsoft.Smartdevice.DeviceAgentTransport.dll и нажмите кнопку ОК.
Ссылка на библиотеку Microsoft.Smartdevice.DeviceAgentTransport будет добавлена в проект.
Дважды щелкните Program.cs (C#) или Module1.vb (Visual Basic) в обозревателе решений для открытия файла в редакторе кода, если этот файл еще не открыт.
Установите курсор в самом начале файла.
Вставьте следующий код:
using Microsoft.SmartDevice.DeviceAgentTransport;
Imports Microsoft.SmartDevice.DeviceAgentTransport
Поместите курсор в методе Main.
Вставьте следующий код:
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.
В меню Построение выберите команду Построить решение.
Теперь имеется приложение смарт-устройства, которое называется DeviceAgent. Позже это приложение будет развернуто на устройстве.
Создайте пакет надстройки в хранилище данных.
Чтобы создать пакет надстройки в хранилище данных
Запустите приложение "Блокнот".
Скопируйте приведенный ниже код в файл "Блокнота".
<?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>
В Visual Studio в меню Сервис выберите команду Создать GUID.
Будет открыто диалоговое окно Создать GUID.
Выберите пункт Формат реестра, щелкните команду Копировать, затем Выход.
Вставьте идентификатор GUID в "Блокнот" в атрибут ID тега Package и удалите окружающие его фигурные скобки.
Например, <Package ID="9C50B38D-4259-40b3-AE9F-C5887DD898FF" Name="DeviceAgent">.
Измените значение тега <PROPERTY ID="RootPath" Protected="True"> на папку, в которой расположен DeviceAgent.exe.
Например, <PROPERTY ID="RootPath" Protected="True">c:\DataExchange\DeviceAgent\bin\debug</PROPERTY>.
Примечание.
Чтобы определить расположение DeviceAgent.exe, щелкните правой кнопкой мыши проект DeviceAgent в обозревателе решений и выберите пункт Свойства. Щелкните вкладку Построить и нажмите кнопку Обзор рядом с пунктом Выходной путь.
Скопируйте библиотеку диск:\Program Files\Common Files\Microsoft Shared\CoreCon\1.0\Target\wce400\armv4i\DeviceAgentTransport.dll в расположение, указанное под корневым путем.
Примечание.
Этот этап является важным, потому что сборка Microsoft.Smartdevice.DeviceAgentTransport.dll использует библиотеку DeviceAgentTransport.dll. Оба файла должны быть развернуты вместе с приложением.
Сохраните файл в "Блокноте".
\ProgramData\Microsoft\corecon\1.0\addons\package.xsl (Windows Vista)
\Documents and Settings\All Users\Application Data\Microsoft\corecon\1.0\addons\package.xsl (другие ОС)
Примечание.
Если файл с именем package.xsl уже используется, укажите другое имя. Имя файла не имеет значения, потому что все файлы в этой папке обрабатываются как пакеты надстроек.
Закройте и перезапустите среду Visual Studio.
Среда Visual Studio загружает папку пакетов надстроек при загрузке. Если Visual Studio запускается правильно, в пакете отсутствуют синтаксические ошибки.
Теперь хранилище данных содержит пакет надстройки с именем DeviceAgent и уникальный идентификатор ID, который был создан Visual Studio. При развертывании пакета интерфейс API связи со смарт-устройством скопирует три файла из папки выходных данных проекта DeviceAgent в каталог устройства диск:\Program File\DeviceAgent. Затем на устройстве будет запущена программа DeviceAgent.exe.
Создание приложения для настольного компьютера, которое разворачивает пакет и взаимодействует с агентом устройства
Чтобы создать приложение для настольного компьютера, которое разворачивает пакет и взаимодействует с агентом устройства
В меню Visual StudioФайл выберите пункт Открыть и пункт Решение или проект.
Откроется диалоговое окно Открыть проект.
Перейдите к решению DataExchange.sln, щелкните его и нажмите кнопку Открыть.
Будет отображен обозреватель решений с приложением DeviceAgent.
В меню Файл выберите команду Добавить, затем выберите пункт Создать проект.
Откроется диалоговое окно Создать проект.
(Visual C#) Разверните узел Visual C# и выберите Windows.
(Visual Basic) Разверните узел Visual Basic и выберите Windows.
В области Шаблоны щелкните Консольное приложение.
Назовите проект DesktopSide и нажмите кнопку ОК.
Обозреватель решений содержит два проекта: DeviceAgent и DesktopSide.
Щелкните правой кнопкой мыши проект DesktopSide в обозревателе решений и выберите пункт Назначить запускаемым проектом.
(Visual C#) В обозревателе решений щелкните правой кнопкой мыши узел Ссылки в проекте DesktopSide и выберите Добавить ссылку.
(Visual Basic) В обозревателе решений щелкните правой кнопкой мыши узел DesktopSide и выберите команду Добавить ссылку.
Откроется диалоговое окно Добавление ссылки.
Щелкните вкладку Обзор, перейдите к файлу диск:\Program Files\Common Files\Microsoft Shared\CoreCon\1.0\Bin, click Microsoft.Smartdevice.Connectivity.dll и нажмите кнопку ОК.
Ссылка на библиотеку Microsoft.Smartdevice.Connectivity будет добавлена в проект DesktopSide.
Дважды щелкните Program.cs (C#) или Module1.vb (Visual Basic) в проекте DesktopSide в обозревателе решений для открытия файла в редакторе кода, если этот файл еще не открыт.
Установите курсор в самом начале файла.
Вставьте следующий код:
using Microsoft.SmartDevice.Connectivity; using System.Collections.ObjectModel;
Imports Microsoft.SmartDevice.Connectivity Imports System.Collections.ObjectModel
Поместите курсор в методе Main.
Вставьте следующий код:
// 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 и разворачивает удаленный агент на устройстве. Затем он устанавливает подключение к устройству и считывает данные пакета. Сведения, считанные с устройства, отображаются в консоли.
Добавьте идентификатор пакета в emulator.GetRemoteAgent(new ObjectId("")).
Например, emulator.GetRemoteAgent(new ObjectId("F85E57BA-5AE9-4FF7-8433-6AB7D991D034")).
Вставьте следующий вспомогательный метод в метод 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
Нажмите клавишу F5 для отладки проекта DesktopSide.
DesktopSide подключается и запускает эмулятор устройства, если он еще не запущен. Затем эта программа развертывает пакет и запускает приложение DeviceAgent. Затем DesktopSide и DeviceAgent обмениваются пакетными сведениями и отображают их для пользователя.
См. также
Основные понятия
Управление устройствами с помощью API подключения интеллектуальных устройств
Общие сведения о пакетах надстроек
Другие ресурсы
Справочник по интерфейсам API подключения к смарт-устройствам