Мобільне програмування: Visual Basic. NET приходить на мобільні пристрої (исходники, документація), Документація, Програмування, статті









Описується, як розробляти Windows-додатки для інтелектуальних пристроїв, що підтримують. NET Compact Framework, за допомогою SDE (Smart Device Extensions) for Visual Studio. NET. Розглядається весь цикл розробки, налагодження та розгортання програми, а також показуються відмінності між. NET Framework і. NET Compact Framework.

Smart Device Extensions (SDE) for Microsoft Visual Studio. NET дозволяє застосувати весь ваш досвід. NET-програмування при розробці Windows-додатків для “інтелектуальних” пристроїв, що підтримують Microsoft. NET Compact Framework. За допомогою SDE можна створювати додатки для платформ Pocket PC і Microsoft Windows CE. NET, використовуючи знайомі мови – Microsoft Visual Basic. NET (або Microsoft Visual C #) і ті ж інструментальні засоби і бібліотеки класів, що і при розробці. NET-додатків для настільних комп’ютерів і серверів. Так як інтелектуальні пристрої не підтримують всі можливості, надаються їх повнорозмірними “родичами”, найскладніше – з’ясувати, які складові частини Microsoft. NET Framework зазнали зміни через приведення цієї інфраструктури у відповідність з обмеженими можливостями мобільних пристроїв. На щастя, середа Visual Studio повністю підтримує мобільні пристрої і, зокрема, дозволяє налагоджувати на настільному комп’ютері програми, розраховані на ці пристрою.

Створювати SDE-додатки в Visual Basic. NET настільки просто, що у вас може виникнути спокуса відразу ж приступити до створення SDE-проекту, помістити елементи управління на форму і написати будь-якої код. Найближчим часом ми так і вчинимо. Але, крім того, я розгляну весь цикл розробки, налагодження та розгортання і покажу, де виявляється особлива природа SDE-програмування і стають помітними відмінності від розробки для настільних додатків. А тим, кого цікавить технічна сторона, я розкажу, що відбувається “за лаштунками”.

Додаток “Hello World”

Почнемо з традиційного програми “Hello World” – незважаючи на очевидну тривіальність, його цілком досить для демонстрації всього процесу розробки, який стосовно інтелектуальним пристроїв складається з наступних етапів.


  1. Створення програми в Visual Studio. NET на настільному комп’ютері.
  2. Розгортання додатки на пристрої.
  3. Налагодження програми в Visual Studio. NET.

Будемо вважати, що ви встановили Visual Studio. NET і SDE (Smart Device Extensions) і що у вас є підключений пристрій або (за відсутності справжнього пристрою) емулятор Pocket PC.


  1. Створення нового SDE-проекту в Visual Basic. NET.

    1. Відкрийте діалогове вікно “New Project” і виберіть шаблон “Smart Device Application” з групи “Visual Basic Projects” (рис. 1).

      Рис. 1. Діалогове вікно New Project, шаблон Smart Device Application


    2. При необхідності змініть місцезнаходження проекту в поле Location. Можливо, вам буде зручніше створити для розробки SDE-додатків окремий підкаталог, що знаходиться поза використовуваного за замовчуванням дерева каталогів вихідного коду.
    3. У поле Name введіть ім’я програми (наприклад, “HelloWorld”). В каталозі, зазначеному в поле Location, буде створено новий каталог з вихідним кодом вашого застосування.
    4. Клацніть OK.

  2. Це призведе до запуску Smart Device Application Wizard (рис. 2). Вам потрібно вибрати платформу, для якої ведеться розробка, – Windows CE або Pocket PC (де Pocket PC є специфічним типом пристрою Windows CE). Від цього вибору залежить, який шаблон проекту будуть використовуватися для побудови спочатку порожнього програми. Так, у формі шаблону “Windows Application” для Pocket PC присутній елемент управління MainMenu, якого немає в шаблоні для платформи Windows CE.

    Рис. 2. Smart Device Application Wizard


    1. Виберіть платформу (якщо будете використовувати емулятор, вкажіть Pocket PC).
    2. Виберіть тип проекту. Для нашого першого додатка, що просто буде показувати форму на пристрої, виберіть “Windows Application”.
    3. Клацніть OK, після чого майстер створить проект (це може зайняти якийсь час).

    Ви повинні побачити додаток на Visual Basic. NET, що виглядає, як показано на рис. 3. Розташування вікон у вас швидше за все буде трохи іншим, так як Visual Studio запам’ятовує позиції вікон, задані при роботі з іншими проектами.

    Рис. 3. SDE-проект, відкритий в Visual Basic. NET

Приділіть пару секунд вивчення вікон Visual Studio. Зверніть увагу: ви бачите майже те саме, що і при розробці настільних додатків на Visual Basic. NET. Перше, що кидається в очі, – відсутність в першої версії SDE деяких компонентів, які відображаються на вкладці Device Controls вікна Toolbox, наприклад діалогових вікон (Color, Files, Font, Print) і “просунутих” елементів користувальницького інтерфейсу (Calendar, ImageList, DataGrid). Крім того, з’явилася панель інструментів Device Extensions. І якщо ви виберете щось на формі (розмір якої заданий відповідно до характеристик цільового інтелектуального пристрої), то побачите, що у вікні Properties показується менше властивостей.

Тепер виконаємо залишилися дії по створенню невеликий тестової програми.


  1. Помістіть на форму кнопку (елемент керування Button). Зверніть увагу на плоский вид кнопки – такий стиль зазвичай використовується на портативних пристроях.
  2. Двічі клацніть кнопку (або якось інакше відкрийте вікно коду) і в обробнику події Click кнопки введіть наступний код:

    MsgBox(“Hello World”)

  3. Натисніть , щоб встановити в цьому рядку точку переривання.
  4. Натисніть , щоб почати послідовне виконання програми. При цьому додаток компілюється (інформація про хід компіляції показується у вікні Output), а потім відкривається діалогове вікно Deploy.
  5. Виберіть цільове пристрій (ми будемо використовувати Pocket PC Emulator) і клацніть Deploy, щоб приступити до розгортання. Як і при компіляції, інформація про хід розгортання показується у вікні Output, а в рядку стану Visual Studio. NET виводиться поточна інформація.
    Примітка Якщо у вашій конфігурації SDE є які-небудь помилки, вони проявляться саме на цьому етапі. Якщо ви прочитали і виконали інструкції з установки, то, як правило, проблема може виникнути тільки одна: не вдається з’єднатися з пристроєм. Зауважте, що в даній версії SDE навіть при використанні емулятора потрібно, щоб у комп’ютера був мережеву адресу. Якщо проблеми з установкою з’єднання вирішити не вдалося, будь ласка, прочитайте відповідну документацію.

Visual Studio. NET зв’яжеться з пристроєм і встановить вашу програму. Перш за все на пристрій встановиться. NET Compact Framework, якщо цієї інфраструктури ще не було на пристрої. Потім ваше додаток буде скопійовано в каталог Windows (за замовчуванням). І, нарешті, додаток запуститься.

Отже, програма виконується на інтелектуальному пристрої (або емуляторі), і в той же час ви налагоджуєте її в Visual Studio. NET на настільному комп’ютері. Ви можете досліджувати додаток на свій розсуд або виконати наступні демонстраційні операції:


  1. Оскільки виконується покрокова налагодження, ви перебуваєте зараз на першому рядку програми: Application.Run (New Form1 ())
  2. Зверніть увагу: вам повністю доступна звична середу розробки Visual Studio. NET, зокрема такі вікна, як Locals, Immediate (Command), Call Stack і т. д.
  3. Продовжуйте виконання програми в покроковому режимі. Тепер ви потрапите в конструктор (New), а потім в підпрограму InitializeComponent. Після виконання оператора Application.Run в методі Main пристрій знову отримає фокус (при використанні емулятора), і на екрані з’явиться форма.
  4. Клацніть кнопку на формі. Ви знову повернетеся в Visual Studio. NET, так як ми встановили точку переривання в обробнику події Click кнопки.
  5. Продовжуйте покрокове виконання програми, поки на інтелектуальному пристрої не відкриється діалогове вікно (рис. 4).

    Рис. 4. Діалогове вікно “HelloWorld”, показуване на пристрої


  6. Клацніть кнопку OK у правому верхньому кутку діалогового вікна пристрою, щоб закрити це вікно.
  7. Знову перейдіть в відладчик, в покроковому режимі закрийте діалогове вікно і поверніться у вихідну точку.
  8. Клацніть кнопку OK у правому верхньому куті форми на інтелектуальному пристрої.
  9. При цьому ви повернетеся в Visual Studio. NET в кінець методу. Зауважте, що додаток зникло з екрану пристрою.
  10. Виконайте ще один або кілька кроків програми для виходу з відладчика.

Отже, ми створили додаток (хай і тривіальне), розгорнули його на інтелектуальному пристрої і налагодили в Visual Studio. NET на настільному комп’ютері. Все це напевно здалося вам дуже знайомим, так як при розробці програм в Visual Studio. NET ви робили майже те ж саме. Тепер закінчимо розробку програми і створимо редістрібутівних пакет, щоб ви могли поділитися цією потужною програмою з друзями і здивувати їх своєю майстерністю програмування для інтелектуальних пристроїв! О, так ви й справді вважаєте, що ця програма Ніччи не може? Немає проблем – трохи пізніше ми що-небудь придумаємо.

Заключна частина розробки програми

Так як ми хочемо, щоб наша програма для інтелектуального пристрою виглядала як справжнє професійне додаток, додамо в неї значок (icon) і створимо редістрібутівних CAB-файл. Потім CAB-файл можна буде відкрити і запустити клацанням або дотиком покажчика (tap), або попередньо скопіювати цей файл на пристрій. CAB-файл можна запускати з будь-якого місця, так як він містить всю інформацію з установки, необхідну інтелектуальному пристрою. При запуску CAB-файлу з нього автоматично витягуються файли програми і поміщаються в підкаталог каталога Program Files з тим же ім’ям, що і проект для інтелектуального пристрою.

Ви можете керувати тим, куди встановлюються файли програми. Для цього потрібно перед запуском майстра CAB-файлів вказати свій INF-файл (з розширенням. Inf) і при необхідності бібліотеку Setup.dll. В INF-файлі задаються каталоги, файли, параметри і конфігурації. У файлі Setup.dll (необов’язковому) містяться функції, що реалізують операції, які виконуються при установці або видаленні вашого застосування. Додаткову інформацію з цієї теми можна знайти в документації SDE.

Додамо значок – це робиться так само, як і для настільних додатків.


  1. Виберіть Properties в меню Project, а у вузлі Common Properties – подузел Build.
  2. В поле Application Icon, призначеному для завдання місця розташування значка додатка, виберіть відповідний значок (ICO-файл). З Visual Studio. NET поставляється багато значків. За умовчанням вони встановлюються в підкаталог C: Program FilesMicrosoft Visual Studio. NETCommon7Graphicsicons. У нашому прикладі виберемо exclem.ico з підкаталогу Misc.
  3. До файлів проекту буде додано значок, а параметру Build Action для файлу значка буде присвоєно значення Content.
    Тепер все готово до компіляції програми та створення редистрибутивной пакета.
  4. Ð’Ñ <Ð ± ÐμÑ € Ð ¸ Ñ, Ðμ Build Cab File Ð ² Ð ¼ ÐμÐ ½ ÑŽ Build. ÐŸÑ € Ð ¸ Ñ Ñ, Ð ¾ Ð ¼ Ð ² Ð ¿Ð ¾ Ð'Ð º Ð ° Ñ, Ð ° Ð »Ð ¾ Ð ³ Ðμ inDebug Ð ² Ð ° ÑÐμÐ ¹ Ð ¿Ñ € Ð ¾ Ð ³ Ñ € Ð ° Ð ¼ Ð ¼ Ñ <Ð ± уÐ'ÐμÑ, Ñ Ð ¾ Ð · Ð'Ð ° Ð ½ Ñ ​​Ð ² Ð ¾ Ð ¹ CAB-Ñ "Ð ° Ð ¹ л Ð'Ð »Ñ Ð º Ð ° Ð ¶ Ð'Ð ¾ Ð ¹ Ð ° Ð ¿Ð ¿Ð ° Ñ € Ð ° Ñ, Ð ½ Ð ¾ Ð ¹ Ð ¿Ð» Ð ° Ñ, Ñ "Ð ¾ Ñ € Ð ¼ Ñ <, Ð ¿Ð ¾ Ð'Ð'ÐμÑ € Ð ¶ Ð ¸ Ð ² Ð ° ÐμÐ ¼ Ð ¾ Ð ¹ SDE. ПР¾ Ñ Ð º Ð ¾ Ð »ÑŒÐ º у Ð ¸ Ð ¼ Ñ Ð ½ Ð ° ÑÐμÐ ³ Ð ¾ Ð ¿Ñ € Ð ¸ л Ð ¾ Ð ¶ ÐμÐ ½ Ð ¸ Ñ - "HelloWorld", файл для Pocket PC отримає ім'я HelloWorld_PPC.ARM.cab, а аналогічний файл для емулятора - HelloWorld_PPC.X86.cab.

На цьому етапі CAB-файл програми можна скопіювати на пристрій. Однак спочатку слід пересвідчитися, що на пристрої вже встановлена. NET Compact Framework. Якщо відомо, що ця інфраструктура не встановлена на пристрої або що потрібно створити дистрибутив для інших користувачів, тоді ви повинні створити CAB-файл для інфраструктури. За замовчуванням ці CAB-файли встановлюються з SDE в каталог:


C:Program FilesMicrosoft Visual Studio .NET
CompactFrameworkSDKv1.0.3300Windows CEwce300

CAB-файли зберігаються в підкаталогах відповідно до типами процесорів пристроїв – наприклад, файл з версією інфраструктури для Pocket PC знаходиться в підкаталозі arm під ім’ям netcf.cjk.ppc3.arm.cab. Файл з інфраструктурою для емулятора міститься в підкаталозі x86 під ім’ям netcf.cjk.ppc3.x86.cab.

Як помістити ці файли на пристрій? Залежно від пристрою можуть бути доступні різні варіанти передачі файлів: скопіювати через карту пам’яті, завантажити Web-сайту, передати з іншого пристрою або скопіювати із загального мережевого каталогу. Так як емулятор не підтримує апаратні варіанти, будемо копіювати із загального каталогу (такий варіант годиться для всіх пристроїв, що підключаються до мережі).


  1. Створіть для програми загальний мережевий каталог.

    1. Створіть на настільному комп’ютері каталог для розміщення CAB-файлів програми та інфраструктури.
    2. Налаштуйте цей каталог як доступний через мережу.
    3. Скопіюйте CAB-файли програми та інфраструктури. NET Compact Framework в цей каталог.
    4. (При необхідності) Зазвичай у пристроїв розмір дисплея значно менше, ніж у настільних комп’ютерів, тому довгі імена файлів “обрізаються”. Можливо, вам здасться зручним перейменувати CAB-файли, присвоївши їм більш короткі імена (щоб було простіше переглядати ці файли на пристрої).

  2. Скопіюйте файли по мережі.

    1. Клацніть значок доступу до загальних каталогах (Network Share) внизу пристрої (рис. 5).

      Рис. 5. Значок, який використовується для доступу до загальних каталогах


    2. Відкриється діалогове вікно Open. Введіть ім’я настільного комп’ютера, щоб подивитися список загальних каталогів або відразу введіть повне UNC-ім’я каталога, щоб до нього підключитися.
      Примітка Ви можете отримати повідомлення про помилку, яке стверджує, що пристрій з таким ім’ям вже є в мережі. Тоді перейменуйте пристрій, виконавши на ньому таке.
      1. Виберіть Settings в меню Start.
      2. Виберіть вкладку System.
      3. Клацніть або виберіть значок About.
      4. Виберіть вкладку Device ID.
      5. Введіть нове ім’я пристрою.
      6. Клацніть або виберіть кнопку OK у правому верхньому кутку діалогового вікна.
    3. Якщо відкриється діалогове вікно Logon to Network Server, введіть у поля User name, Password і Domain відповідно ім’я користувача, пароль та ім’я домена. Клацніть прапорець Save password, щоб це діалогове вікно не відкривалося надалі.
    4. На вашому пристрої з’явиться вміст загальнодоступного каталогу (рис. 6).

      Рис. 6. Загальний каталог на настільному комп’ютері


    5. Щоб скопіювати на пристрій CAB-файл. NET Compact Framework, виберіть CAB-файл (утримуючи натиснутим перо або кнопку миші) і виберіть Copy у спливаючому меню.
    6. Потім перейдіть в якій-небудь каталог пристрої (наприклад, My Documents). Клацніть Edit внизу пристрою і виберіть Paste. Повинно відкритися діалогове вікно, що інформує про хід операції копіювання.
    7. Для запуску установки клацніть або виберіть CAB-файл. . NET Compact Framework встановиться на пристрій, а CAB-файл буде видалений, щоб не займати пам’ять.
      Примітка Можливо, ви отримаєте повідомлення про помилку “The application cannot run on this device type”. Це означає, що ви скопіювали не той CAB-файл, тому потрібно знову виконати попередні кроки і скопіювати правильний CAB-файл.
    8. Нарешті, виконайте ці дії з CAB-файлом програми. При цьому в каталозі Program Files створюється підкаталог з таким же ім’ям, що і у додатку, та в цей каталог встановлюються програми і використовуються їм файли (рис. 7).

      Рис. 7. Додаток “HelloWorld” на пристрої


  3. Остання операція, яку ви, ймовірно, захочете виконати, – створення ярлика програми в меню Start пристрою.

    1. Знайдіть файл програми HelloWorld в підкаталозі WindowsHello World.
    2. Виберіть файл і утримуйте в натиснутому стані кнопку (або перо на реальному пристрої), щоб відкрити контекстне меню, виберіть Copy.
    3. Перейдіть в підкаталог WindowsStart MenuPrograms, клацніть або виберіть меню Edit в лівому нижньому кутку і виберіть Paste Shortcut.
    4. Так як за замовчуванням ім’я ярлика починається з “Shortcut to …” (Рис. 8), можливо, має сенс скористатися зручним випадком і перейменувати ярлик.

    Рис. 8. Ярлик “HelloWorld” на пристрої


Що всередині?

Отже, що ж відбувається в дійсності, коли ви створюєте і запускаєте SDE-додаток HelloWorld? Найважливіше, про що потрібно знати: коли ви обираєте створення SDE-проекту, ви починаєте працювати з іншим шаблоном, ніж при створенні настільного проекту. Зокрема, розробка ведеться для. NET Compact Framework, а не для повної версії інфраструктури.

Розглянемо структуру щойно створеної програми HelloWorld (в принципі, підійде будь SDE-проект). Вікна проекту показані на рис. 9.


  1. Відкрийте вікно Solution Explorer.
  2. Розкрийте вузол References.
  3. Виберіть посилання (наприклад, System).
  4. Подивіться властивість Path у вікні Properties:

C:Program FilesMicrosoft Visual Studio .NETCompactFrameworkSDKv1.0.3300Windows CESystem.dll

Рис. 9. Посилання SDE-проекту

При розробці настільних додатків використовуються. NET Framework-збірки, що розміщуються в Global Assembly Cache (GAC). Ці збірки знаходяться в кеші на кожному настільному комп’ютері, на якому встановлена. NET Framework. Однак, щоб скористатися збірками при програмуванні для мобільного пристрою, їх доводиться розгортати на цьому пристрої. При установці SDE ці збірки копіюються в підкаталог CompactFrameworkSDKv1.0.3300Windows CE каталогу Microsoft Visual Studio. NET. Якщо ви переглянете вміст цього підкаталогу, то виявите підкаталоги arm, mips, sh3 і x86, відповідні типам процесорів, які підтримуються. NET Compact Framework. У цих підкаталогах знаходяться редістрібутівних CAB-файли, про які я розповідав в розділі, присвяченому розгортання HelloWorld.

А зараз трохи базової інформації. При компіляції проекту в Visual Studio. NET вихідний код компілюється в одну або кілька збірок (файлів з розширенням. EXE і. DLL). У цих. NET-збірках містяться метадані та код на мові MSIL (Microsoft Intermediate Language). Машинний виконуваний код в збірках не міститься. Замість цього під час виконання здійснюється компіляція за запитом (JIT-компіляція) MSIL-коду в машинний. Звичайно, в ваших додатках активно використовуються типи, визначені в бібліотеці класів. NET Framework, яка також є набором збірок, що містять метадані та MSIL-код. Ці збірки скомпільовані і зберігаються на вашому комп’ютері в каталозі виконуючого середовища.

Як ви могли здогадатися, в SDE при компіляції зборок, що використовують. NET Compact Framework, застосовуються ті ж принципи. Оскільки ці збірки містять MSIL, а не машинний код, при розробці програми на настільному комп’ютері використовуються, по суті, ті ж збірки. NET Compact Framework, що і збірки, що розгортаються на пристрої! Можна всебічно досліджувати яку-небудь з збірок. NET Compact Framework, наприклад, system.dll, за допомогою утиліти ildasm.exe зі складу. NET Framework SDK (вона встановлюється з Visual Studio. NET) (рис. 10).

Рис. 10. Дослідження збірки NET Compact Framework system.dll за допомогою ILDASM

Visual Studio .NET

При установці Smart Device Extensions (SDE) for Visual Studio. NET, крім усього іншого, встановлюється і. NET Compact Framework SDK розміром 111 Мбайт, що розміщується в папці C: Program FilesMicrosoft Visual Studio. NETCompactFrameworkSDK. Крім того, при установці SDE вноситься кілька тонких змін в Visual Studio. NET. Наприклад, однією з особливостей SDE є можливість розгортання та тестування додатків на емуляторі інтелектуального пристрою. Для налаштування емулятора виберіть Options в меню Tools, перейдіть на вкладку Device Extensions, виберіть Devices і, нарешті, виберіть Pocket PC Emulator.

Рис. 11. Налаштування параметрів емулятора

Найважливіші параметри конфігурації – розміри екрана (менші, ніж у настільного комп’ютера і зазвичай складають 240 × 320 пікселів).

При установці SDE з’являється додаткова команда в меню Build, що дозволяє виконувати розгортання прямо на пристрій. Крім того, меню Build дає можливість здійснювати пакетну збірку (batch build), при якій за один прийом компілюються конфігурації для декількох проектів, і створювати CAB-файл для дистрибутива.

Compact “ний. NET Framework

Мабуть, основна проблема при роботі з мобільними пристроями – їх апаратні обмеження. Очевидно, розмір екрану портативних пристроїв менше, ніж у комп’ютерів (зазвичай 320 × 240 пікселів). Потужність процесора у них ще менше (в першу чергу з міркувань продовження терміну роботи від акумуляторної батареї). Об’єм пам’яті, що зазвичай використовуються для тривалого зберігання даних, у таких пристроїв теж набагато менше, ніж у комп’ютерів. Крім того, використовуються дещо інші методи введення. У типового цільового пристрою SDE є від 16 до 64 Мбайт пам’яті для постійного зберігання програм і для їх виконання.

До складу повної. NET Framework входять фундаментальна бібліотека класів, загальномовне виконуюча середу (Common Language Runtime, CLR) та інші інфраструктури начебто ASP.NET. Повна. NET Framework поширюється в CAB-файлі розміром 16 Мбайт і займає при установці на настільний комп’ютер близько 43 Мбайт дискового простору (загальні вимоги до дискового простору вдвічі більше, так як більшість збірок утворює Global Assembly Cache). Найменша Windows Forms-програма використовує файли загальним обсягом більше 8 Мбайт. Очевидно, що повна. NET Framework пред’являє до простору для зберігання даних і до пам’яті вимоги, занадто високі для мобільних пристроїв з обмеженими апаратними можливостями.

При установці. NET Compact Framework потрібно приблизно 1,3 Мбайт дискового простору (загальний розмір файлів – 2,0 Мбайт, але він скорочується за рахунок оптимізації зберігання файлів в Windows CE). При запуску SDE-програми на пристрої завантажуються CLR і код програми, так що для роботи SDE-програми, що використовує Windows Forms, потрібно мінімум 1 Мбайт. Додаткові копії такого додатки будуть вимагати значно менше пам’яті (близько 0,75 Мб кожна).

Так як загальний розмір файлів. NET Compact Framework приблизно в 20 разів менше, ніж у повній. NET Framework, і, наприклад, Windows Forms-програма для пристрою потрібно у 8 разів менше пам’яті, очевидно, що . NET Compact Framework ретельно оптимізована самими різними способами.

Інтелектуальні пристрої не працюють Web-серверами ASP.NET (хоча це, звичайно, інтригуюча ідея), так що в компактній версії інфраструктури не потрібна підтримка Web Forms і мовних компіляторів, що входять до складу. NET Framework. Оскільки додаток розробляється на настільному комп’ютері і тільки потім розгортається на пристрої, не потрібна і підтримка таких засобів, як візуальні дизайнери, а також серверної функціональності, наприклад Active Directory і Enterprise Services. У табл. 1 порівнюються розміри (в Кбайт) основних просторів імен, що використовуються в повній і компактній версіях. NET Framework.

Табл. 1. Розміри просторів імен бібліотеки класів (в Кбайт)














































Повна  Компактна  Простір імен 
1374 140 Microsoft (мови і підтримка)
3044 540 System
1148 755 System.Data
1708 78 System.Web
452 34 System.Drawing
1936 118 System.Windows.Forms
1264 192 System.XML
1652 0 System.Design
1491 82 System (інше)
14 068  1938   

Примітка Таблиця не відображає стиснення. NET Compact Framework на Windows CE-пристроях, що скорочує загальний розмір файлів приблизно до 1,5 Мбайт.

Бібліотека підтримки Visual Basic

Однією з областей, в яких при переході до. NET-програмування для мобільних пристроїв збереглася велика частина функціональності, – бібліотека підтримки Visual Basic. NET, що міститься в збірці Microsoft.VisualBasic.dll. У Visual Basic. NET більше немає власної виконуючого середовища (додатки, написані на ньому, використовують ті ж CLR і. NET Framework, що й інші. NET-додатки), але Microsoft поставляє цю збірку з численними функціями, типами та константами для сумісності з попередніми версіями Visual Basic. У версії цієї DLL, використовуваної в. NET Compact Framework, збережена велика частина такої функціональності (Розмір DLL приблизно в 2 рази менше розміру повної версії).

Зокрема, у версії цієї бібліотеки для мобільних пристроїв повністю підтримуються клас Collection, функції перетворення типів, керуючі символи, DateTime, MsgBox і загальновживані константи начебто CrLf. Але з бібліотеки вилучені:


  • константи FileAttributes, FileSystem і Open;
  • варіантні типи (vbArray, vbBoolean, vbNull та інші типи даних Variant, а також функції VarType);
  • перетворення регістра, мови та інші рядкові перетворення;
  • функція Len (не та, яка працює з рядками);
  • функції AppActivate, Shell і Environment;
  • CreateObject, GetObject, CallByName.

Якщо проаналізувати, які можливості відсутні в. NET Compact Framework, то виявиться, що більшість цих спрощень цілком виправдано. Наприклад, в Windows CE використовуються власна файлова система, так що код файлового вводу-виводу для Windows CE-пристроїв буде зовсім іншим, ніж для настільних комп’ютерів. В. NET Compact Framework також немає підтримки взаємодії з COM-компонентами, тому не потрібні функції, використовувані COM (наприклад, CreateObject), і варіантні типи (працювати з COM-типами даних не потрібно).

Windows Forms

У більшості програм для інтелектуальних пристроїв застосовується користувальницький інтерфейс на основі Windows. Тому зміни, внесені в Windows Forms, представляють величезний інтерес для розробників, бажаючих писати програми для пристроїв з малим форм-фактором. Оскільки програми, що використовують форми, повинні бути добре знайомі програмісту на Visual Basic, ваш попередній досвід виявиться досить до речі.

Для початку подивимося на список елементів управління, що входять у версію Windows Forms для. NET Compact Framework:
































Button PictureBox
CheckBox ProgressBar
Combobox RadioButton
DomainUpDoan StatusBar
HScrollBar TabControl
Label TextBox
ListBox Timer
MainMenu TrackBar
NumericUpDown VScrollBar
Panel  

Як бачите, основні елементи управління (і не тільки основні) як і раніше присутні, так що розробка невеликих додатків і утиліт для інтелектуальних пристроїв не становить складності. Однак деякі “просунуті” елементи управління повної версії. NET Framework недоступні. Багато хто з них, наприклад Command, PropertyStore і ToolTip, або не годяться для портативних пристроїв, або повинні реалізовуватися в Windows CE зовсім по-іншому. Деякі елементи управління, наприклад Splitter, вимагають виконання для користувача інтерфейсом операцій, незвичних більшості користувачів, що працюють з портативними пристроями. Інші елементи управління на кшталт CheckedListBox можна імітувати, комбінуючи елементи більш низького рівня. Ви також знайдете, що недоступні і інші можливості повної версії Windows Forms, такі як HTML Help і засоби прямої взаємодії з операційною системою, наприклад NativeWindows, SendKeys, OSFeature (використовується для підтримки тем) і SystemInformation.

Форма і елементи управління

У версії класу Form. NET Compact Framework підтримуються більше трьох чвертей подій і методів і приблизно половина властивостей класу Form повної версії. Можна задавати кольору, деякі стилі, підключати меню. Не можна створити MDI-додаток, показати форму в панелі завдань, реалізувати операції drag-and-drop і обробляти ряд подій клавіатури (наприклад, натискання кнопки Cancel), не використовуються на портативних пристроях.

Розглянемо один з елементів управління – TabControl – і обговоримо, що у версії для. NET Compact Framework залишилося колишнім, а що змінилося. Як і раніше, вкладки настроюються в TabPage Collection Editor:

Рис. 12. Елемент управління TabControl в TabPage Collection Editor

Можливостей для налаштування зовнішнього вигляду вкладок менше, ніж у повній версії. Не підтримуються такі “просунуті” параметри, як властивості групи Behavior (AllowDrop, ContextMenu, ImeMode) і AutoScroll. Але ці параметри використовуються не часто. Єдине широко застосовується властивість, відсутнє в компактній версії, – властивість Tag. Те ж відноситься і до самого TabControl: основні властивості UI збереглися, але деякі можливості не застосовні до Windows CE-пристроїв, тому, наприклад, властивості ContextMenu і ToolTipText відсутні в компактній версії. Інші властивості просто прибрані для скорочення розміру елемента управління. Відсутні й такі властивості, як Accessibility і DataBinding, – вони залежні від інших засобів. NET Framework, які також відсутні.

Розробка SDE-додатків

Через меншого розміру екрану мобільних пристроїв є вірогідність, що доведеться повністю переробляти UI. В більшості випадків при перенесенні існуючих програм на мобільний пристрій єдине, про що слід турбуватися, – відсутність деяких елементів управління, через що, можливо, доведеться створювати UI заново.

Так як у мобільного пристрою крихітна клавіатура (або вона взагалі показується на екрані), ввести текст на мобільному пристрої не так просто, як на настільному або наладонной комп’ютері. Вам доведеться ще раз подумати про взаємодію користувача з додатком, щоб якомога більше інформації вводити через сенсорний екран або виділені апаратні кнопки.

. NET Compact Framework SDK, що поставляється з SDE, включає набір програм-прикладів, що демонструють базові прийоми розробки для платформ портативних пристроїв. Ви можете використовувати ці програми як основу для своїх додатків. Доступні наступні приклади.


  • Bubble – малювання і заливка графічних фігур за допомогою пензля на Windows-формі. Також демонструється створення потоку (thread).
  • Calculator – демонструє програмування для Windows Forms, в тому числі роботу з елементами управління і обробку подій.
  • Scribbler – версія класичної програми малювання Scribble, в якій для малювання на Windows-формі використовується GDI +. Крім того, показується, як малювати на поверхні, що знаходиться за екраном, і відслідковувати переміщення миші.
  • Inventory – демонструє сериализацию набору даних в XML, використання ADO.NET для доступу до SQL Server і роботу з Windows Forms. Крім того, показується, як завантажувати ресурси із зображеннями з файлів.
  • Stock Quote – виклик Web-сервісу XML в Windows Forms. У прикладі міститься і сам Web-сервіс.
  • WaitCursor – оголошення Win32-функцій та звернення до них.

Крім того, до цього документу додаються два приклади, що демонструють деякі аспекти програмування для інтелектуальних пристроїв на Visual Basic.


  • Authors – заповнення ListView записами DataSet, створюваного по XML-документу.
  • PowerStatus – оголошення Win32-функцій операційної системи Windows CE і звернення до них.

Використання ListView

Одним з елементів управління, найчастіше використовуваних розробниками на Visual Basic, є сітка того чи іншого виду, в якій показуються табличні дані. Хоча в. NET Compact Framework сітки відсутні, замість них можна застосувати елемент управління ListView, що виглядає так само, як сітка:

Рис. 13. Приклад ListView на мобільному пристрої

Як все це працює, показується в прикладі Authors, що додається до даного документу. Перш за все потрібно передати дані на пристрій. У нашому прикладі XML-файл копіюється на пристрій на етапі розробки. Спочатку ви повинні додати файл в проект, і звичайно для цього використовується команда Add Existing Item в Solution Explorer.

Крім того, можна вказати папку, в яку будуть міститися при розгортанні виконуваний файл програми та файл даних. Для цього потрібно або задати Output File Folder у вікні Properties проекту, або увійти в діалогове вікно Properties проекту, вибрати подузел Device Extensions вузла Common Properties і ввести шлях в поле Output file folder. У нашому прикладі використовувалася папка SamplesVB.NET, так що у вихідному коді також виконується звернення до файлу в цій папці:


Private Const AUTHORSXML As String = “SamplesVB.NETAuthorsDB.xml”

Потім оголошуємо DataSet:


Private dsAuthors As System.Data.DataSet

Тепер ми готові до того, щоб завантажити XML-файл в DataSet методом ReadXml:


Private Sub loadXMLData()
dsAuthors = New DataSet(“AuthorsDB”)
Try
Dim fs As New FileStream(AUTHORSXML, FileMode.Open)
Dim xr As New XmlTextReader(fs)
dsAuthors.ReadXml(xr)
xr.Close()
fs.Close()
Catch e As System.IO.FileNotFoundException
MessageBox.Show(“File ” & AUTHORSXML & ” not found.”)
Catch e As XmlException
MessageBox.Show(“XmlException occured”)
End Try
End Sub

А ось обробник події Load класу Form, де викликається процедура завантаження, а потім DataSet перебирається в циклі, в якому всі записи додаються в елемент управління ListView:


Private Sub frmAuthors_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
loadXMLData()
Dim dr As DataRow
Dim it As ListViewItem
For Each dr In dsAuthors.Tables(“Authors”).Rows
it = New ListViewItem(dr(“id”).ToString())
it.SubItems.Add(dr(“name”).ToString())
it.SubItems.Add(dr(“phone”).ToString())
lvCompanies.Items.Add(it)
Next
End Sub

Нарешті, ми задаємо властивості елемента управління, зокрема Columns. Це робиться так само, як і для елемента управління ListView в повній версії. NET Framework, – або в період виконання, або в редакторі властивостей:

Рис. 14. Набір Columns елемента управління ListView

Виклик Web-сервісу

Тепер подивимося, як викликати Web-сервіс з пристрою. У проектах StockQuoteService і StockQuote міститься вихідний код Web-сервісу і SDE-проекту відповідно. На відміну від використання XML-файла в прикладі з ListView тут XML-файл поміщається в головну збірку. Для вбудовування файлу у збірку потрібно привласнити властивості XML-файла Build Action значення Embedded Resource.

Web-сервіс StockQuoteService може виконуватися як на настільних комп’ютерах, так і на інтелектуальних пристроях і містить всього один Web-метод (код обробки помилок не показаний):


<WebMethod()> _
Public Function getQuoteDataSetX() As DataSet
Dim dsIn As New DataSet()
Dim sIn As Stream = [Assembly].GetExecutingAssembly(). _
GetManifestResourceStream _
(“StockQuoteService.stockdata.xml”)
Dim srXMLReader As New StreamReader(sIn)
dsIn.ReadXml(srXMLReader)
srXMLReader.Close()
sIn.Close()
Return dsIn
End Function

Так як ресурс міститься всередині збірки, використовується метод GetManifestResourceStream, що завантажує іменований ресурс в Stream. Потім XML зчитується з потоку методом DataSet.ReadXml.

Клієнт StockQuote, який звертається до Web-сервісу, виглядає наступним чином:

Рис. 15. Приклад StockQuote, що виконується на інтелектуальному пристрої

Як і при розробці настільного клієнта Web-сервісу, необхідно отримати посилання на файл StockQuoteService.asmx:


http://machine/stockquoteservice/stockquoteservice.asmx

Після отримання посилання на Web-сервіс для вибірки даних в DataSet достатньо написати лише три рядки коду:


Private sq As New StockQuoteService.StockQuoter()
Private ds As DataSet
ds = sq.getQuoteDataSet()

Як і при роботі з XML-файлом в Web-сервісі, в цьому прикладі також використовуються вбудовані графічні файли, зчитувальні методом GetManifestResourceStream.

Виклик API-функцій

Програмісти на Visual Basic традиційно використовували прямі звернення до DLL, що входять до складу Windows (а також до інших DLL), щоб отримати доступ до функціональності, не надається VB і його виконуючою середовищем. Спочатку Microsoft Win32 API застосовувався для роботи з INI-файлами, потім – з реєстром, а в подальшому Win32-функції стали широко використовуватися для вирішення більш складних завдань, таких як синхронізація процесів (наприклад, WaitForMultipleObjects) або графічні операції (BitBlit, StretchBlit та ін.) Більшість цих функцій тепер викликається через класи базової Framework Class Library. Без перебільшення можна сказати, що доступні тисячі таких класів. Але в деяких додатках все ж доводиться звертатися до Win32-функцій, які не мають еквівалента в NET Framework (наприклад, до GetPrivateProfileString). В керованому коді для цього використовується підмножина сервісів Interop, зване PInvoke (скорочення від Platform Invocation). Майте на увазі, що при використанні PInvoke, розробник не повинен забувати про проблеми безпеки, що виникають при виклику некерованого коду, і враховувати їх у своїх програмах.

І там, де. NET Compact Framework реалізує лише підмножина повної Framework Class Library, ви можете за допомогою PInvoke отримати доступ до відсутньої функціональності, безпосередньо викликаючи відповідні функції Windows CE API. Так, в. NET Compact Framework-версії Windows Forms клас Cursor не реалізований. На щастя, ми можемо задіяти Win32-функції LoadCursor і ShowCursor для зміни виду курсора. У Windows CE ці функції знаходяться в бібліотеці coredll.dll, і їх оголошення виглядають приблизно так:


Declare Function LoadCursor Lib “coredll.dll” (ByVal zeroValue As Integer,
ByVal cursorID As Integer) As Integer
Declare Function SetCursor Lib “coredll.dll” (ByVal cursorHandle As
Integer) As Integer

Якої-небудь інструмент, наприклад API Text Viewer, що входить до складу Visual Basic 6.0, дозволяє виконати велику частину роботи по визначенню виду відповідного оператора Declare. Крім того, вам може знадобитися доступ до Windows CE SDK, щоб визначити, як саме повинні викликатися API-функції на платформі Windows CE. Зокрема, вам може знадобитися передати функцій відповідні константи і навіть структури. Наприклад, щоб задати форму курсора як в Windows, потрібно знати числовий ідентифікатор такого курсора:


Private hourGlassCursorID As Integer = 32514 ” &H7F02

Тоді задати потрібну форму курсора досить легко:


cursorHandle = LoadCursor(0, hourGlassCursorID)

Закінчена програма, що показує, як все це працює, є в прикладі WaitCursor, що постачається с. NET Compact Framework SDK. Зверніть увагу, що курсор “пісочний годинник” на інтелектуальному пристрої виглядає зовсім по-іншому.

Windows CE API

Звичайно, є і функціональність, доступна тільки в Windows CE; до неї теж можна звертатися через PInvoke. Наприклад, функція GetSystemPowerStatusEx є тільки в Windows CE API і призначена для отримання інформації про стан додаткової акумуляторної батареї. У стандартному Win32 API такої функції немає. Оголошення цієї функції трохи складніше, ніж попереднє оголошення:


Declare Function GetSystemPowerStatusEx Lib “coredll” _
Alias “GetSystemPowerStatusEx” _
(<[In](), Out()> ByVal lpSystemPowerStatus As SYSTEM_POWER_STATUS_EX, _
ByVal fUpdate As Boolean) As Long

Перше, що кидається в очі, – вказівка ​​типів параметра в оголошенні. Ці типи використовуються, щоб задати, які параметри є вхідними і які параметри будуть повертатися. Так як “In” є ще і ключовим словом Visual Basic, доводиться укладати “In” в квадратні дужки. Типи “In” і ​​”Out” визначаються в InteropServices, отже, ви повинні імпортувати цей простір імен:


Imports System.Runtime.InteropServices

Далі ви помітите, що функція повертає структуру SYSTEM_POWER_STATUS_EX. Щоб працювати з цією структурою, можна або скористатися ключовим словом Structure, або помістити її визначення в клас і відповідно впорядкувати члени класу:


<StructLayout(LayoutKind.Sequential)> _
Public Class SYSTEM_POWER_STATUS_EX
Public ACLineStatus As Byte
Public BatteryFlag As Byte
Public BatteryLifePercent As Byte
Public Reserved1 As Byte
Public BatteryLifeTime As Int16
Public BatteryFullLifeTime As Int16
Public Reserved2 As Byte
Public BatteryBackupFlag As Byte
Public BackupBatteryLifeTime As Byte “Помилка в документації
Public Reserved3 As Byte
Public BackupBatteryLifePercent As Byte “Помилка в документації
Public BackupBatteryFullLifeTime As Byte
End Class

Зверніть увагу, що два члени – BackupBatteryLifeTime і BackupBatteryLifePercent – насправді треба поміняти місцями, а в документації вони йдуть у неправильному порядку.

Тепер виклик функції не представляє складності:


Dim sps As New SYSTEM_POWER_STATUS_EX()
ret = GetSystemPowerStatusEx(sps, False)

Нижче показаний зовнішній вигляд нашої програми-прикладу та вкладки Power з аплету System в Settings при виконанні на кишеньковому комп’ютері iPAQ, до якого підключена зовнішня батарея. Для пристрою, що працює від батареї і встиг частково її розрядити, ми побачимо наступну картину:

Рис. 16. GetPowerStatusEx і Power на пристрої з частково розрядженими батареями

Важливо зауважити, що не обов’язково будуть використовуватися всі поля структури. Наприклад, iPAQ не передає для зовнішньої батареї, яка підключається по кабелю, BatteryBackupFlag і біт Charging, так що і в нашому прикладі, і у вбудованому модулі Power показується не вся можлива інформація.


Міграція та портування

Як розробнику на Visual Basic, вам, можливо, буде потрібно переносити код існуючих додатків на нові платформи, що підтримують. NET Compact Framework. Може, ви будете портувати настільне додаток, використовує повну інфраструктуру, а може, і програми, написані з застосуванням старих інструментальних засобів Microsoft для портативних пристроїв на зразок Embedded Visual Basic 3.0.

Перенесення додатків, розроблених з використанням повної версії. NET Framework, на SDE не особливо складний, але може вимагати багато часу. Якщо в одному примірнику Visual Studio. NET відкрити настільну версію, а в іншому – створити SDE-проект, виявиться, що можна просто скопіювати багато елементів управління з настільної версії і вставити їх на SDE-форму. При цьому багато властивостей зберігаються. Звичайно, з елементами управління, не підтримуваними. NET Compact Framework, так вчинити не вийде. Тому, якщо виконання вашої програми залежить від коду обробників подій цих елементів управління, цю частину програми доведеться переробити. Також доведеться витратити якийсь час на “стиснення” елементів управління, щоб вони вміщалися на невеликому дисплеї портативного пристрою.

З іншого боку, код процедур переноситься простіше. Швидше за все виявиться, що можна скопіювати велику частину оголошень і обробників подій, що знаходяться у визначенні форми. Якщо каки-то об’єктів і їх членів в. NET Compact Framework немає, можна згенерувати по ним список записів TODO в Task List, а перед компіляцією програми – відреагувати на ці записи.

Перенесення додатки, розробленого на Embedded Visual Basic 3.0, зажадає куди більшої роботи. Зокрема, стара версія Visual Basic більше нагадувала VBScript, ніж добре нам знайома настільна версія Visual Basic. У ній підтримувався тільки тип даних Variant, не підтримувалися UDT (User Defined Types) і не було більшості елементів управління, що застосовуються в настільній версії Visual Basic. До того ж, додатки, що розробляються за допомогою інструментів старого покоління, створювалися із застосуванням компонентів, об’єктів доступу до даних і елементів управління, що спираються на COM. В. NET Compact Framework всього цього немає. В кінцевому підсумку може виявитися, що доведеться розробляти програму заново.


Висновок

Мета цього документа – дати вам, як розробнику на Visual Basic, уявлення про те, що являє собою програма для інтелектуального пристрою, в якій використовується SDE for Visual Studio. NET. Я розповів про відмінності між. NET Framework і. NET Compact Framework. Крім того, я показав весь цикл розробки, налагодження та розгортання програми. Навіть якщо у вас немає інтелектуального пристрою, розробку можна вести за допомогою повнофункціонального програмного емулятора.

У той же час я описав далеко не всі аспекти SDE-розробки. Є й інші області, які можуть зацікавити розробників на Visual Basic, вже використовують SDE, щоб швидко створювати додатки для інтелектуальних пристроїв. Зокрема, у розробника може виникнути бажання поекспериментувати з написанням власних елементів управління. Якщо вам потрібна потужна функціональність для роботи з базами даних, можна встановити Microsoft SQL Server Windows CE Edition.

Примітка Екранні знімки для цього документа отримані за допомогою програмного емулятора і Remote Display Control. Якщо ви хочете зробити екранні знімки свого пристрою, наприклад для написання документації, то можете скачати Remote Display Control з Web-сайту Microsoft, присвяченого мобільним пристроям.

Додаткову інформацію по Visual Studio. NET і. NET Compact Framework см. на Web-сайті Device Development, Присвяченому розробці для пристроїв з застосуванням Visual Studio. NET.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*