Visual studio and windows ce

База знаний
Try 2 Fix beta

Установка компонентов для разработки ПО для Windows CE 6.0 (Visual Studio 2005 + Windows Embedded CE 6.0)

В статье рассказываем как развернуть среду разработки программного обеспечения для Windows CE 6.0. Ничего сложного, конечно же, нет, но за годы, прошедшие с момента релиза Microsoft Visual Studio 2005 и Windows Embedded CE 6.0, эти компоненты обросли наборами дополнений, которые тоже необходимы. И устанавливать их надо в определённой последовательности. В качестве ОС мы выбрали Windows XP Pro SP3, так как наши устанавливаемые пакеты разрабатывались под неё.

Устанавливаем компоненты в следующей последовательности:

После установки всех пакетов можно приступать к созданию образа ОС и дальнейшей разработке!

Эти статьи будут Вам интересны

Ubuntu: смена часового пояса и синхронизация времени

31 октября 2018 ВК Tw Fb

Любой сервер нуждается в выставлении точного времени. Это нужно для самых различных вещей, начиная от сбора корректных логов, заканчивая работой WEB-приложений, в работе которых участвуют сертификаты. Установка точного времени складывается из двух частей: синхронизация самого времени и установка правильного часового пояса. Посмотрим, как нам это сделать.

Вход в сетевую папку без ввода пары логина и пароля

28 декабря 2016 ВК Tw Fb

По какой-то абсолютно необъяснимой причине пользователи Windows 10 в последнее время столкнулись со следующей проблемой: при входе в сетевую папку в каждой сессии предлагается ввести логин и пароль, даже если в прошлый раз пользователь ставил галочку «Запомнить пароль». В предыдущих версиях ОС такая проблема тоже встречалась, но не носила массовый характер. В Windows XP Home Edition вообще запомнить пароль к сетевому ресурсу нельзя. Делаем себе хорошо!

Ярлыки вместо файлов на флешке. Recycler

31 октября 2018 ВК Tw Fb

Взрыв из прошлого! Не думали, что в 2018 году понадобится эта инструкция, но мы ошибались! На наших клиентов напал старый добрый зловред, который скрывает все файлы и папки на флешке, превращая их в ярлыки! Не торопитесь форматировать или выкидывать флешку, все Ваши файлы на месте!

База знаний «Try 2 Fix» Beta

Все материалы свободны
к распространению с обязательным
указанием источника

How to setup development environment for WinCE and VS2008

Contents

Note: Microsoft moved most of the Windows CE documentation to https://docs.microsoft.com/en-us/previous-versions/windows/embedded/gg154201(v=winembedded.80), and it is not indexed by Google.

This article describe the setup for application development on WinCE 5,6,7 with Visual Studio 2008. If you are interested in Windows Embedded Compact 2013 and Visual Studio 2012, 2013 or 2015 have a look here.

Setup

Install the following SW on your development PC.

Windows Mobile Device Center / ActiveSync

If you use Windows XP or an earlier version you need to install ActiveSync. Windows 7/8 will automatically use Windows Mobile Device Center when you connect your Toradex Module with the development PC

Visual Studio 2008

Download and install Visual Studio 2008. You may find more information in our Windows Embedded Compact Application Development article.

Install at least the SDK for WinCE 6.0 plus the SDK for the Win CE version you plan to develop for. To download and install SDK click here.

Remote Display tool

The Remote Display allows you to see the display content of the Toradex module even if it is not connected to a screen or the screen settings are invalid.

Читайте также:  Не устанавливается последнее обновление windows 10 выдает ошибку

Development environment setup is complete.

Write your first Program

Get started with these projects:

Deployment and debugging in Visual Studio 2008

Before deploying and debugging the project to the Colibri module, connect the module via USB client port to the PC and power up the board. After a few seconds, the device will be shown as connected in Windows Mobile Device Center (for Windows 7/8) or Active Sync (for Windows XP).

Deployment and debugging in VS2008 can also be done over an Ethernet connection.

NOTE:

  • Use an enough strong power supply, we recommend 12V@2A
  • Use a USB 2.0 High Speed capable USB cable for reliable connection.
  • Debugging and deployment over an active sync connection works only if the explorer is enabled on the device (see Disable the Explorer).

«Hello, World» с ARM и Windows CE 6.0 на C#

Итак, попробуем написать тестовую программу для mini2440 и Windows CE 6.0. Для этого нам понадобится следующее:
— Visual Studio 2008 (можно с SP1)
— .NET Compact Framework 3.5 SDK (мои примеры будут сделаны с ним, ставится вместе с VS2008)
— библиотеки с драйвером GPIO вот отсюда www.domodom.fr/documentsJointsSpip/Driver%20GPIO%20v1.0.zip

Небольшое отступление «Почему именно студия и C#?»
Вообще под WinCE можно кодить много на чем. Изначально была такая штука, как Embedded Visual Studio, которая позволяла писать программы для портативных windows систем используя С++, специфические API и т.д. Однако с появлением .NET Compact Framework и C# Microsoft начала пересаживать на них всех разработчиков, причем не только ембеддеров, ибо просто, быстро и удобно. Плюсы студии и фрейворка в том, что можно достаточно быстро получить красивое приложение с окошками, кнопочками и прочими свистелками и перделками, при этом не вникая в код для описания этих самых окошек и кнопочек, студия все сделает сама, а разработчику можно углубиться в написание рабочего кода. Еще есть альтернатива в виде Qt Embedded, но я ее не пробовал. Еще плюс студии в том, что приложения можно отлаживать прямо на устройстве, достаточно подключить его к ПК, в студии выбрать в качестве Debug-target Windows CE Device и при нажатии кнопки дебага студия сама зальет программу на устройство и запустит отладку(на системах до XP включительно необходимо наличие ActiveSync, на Vista и Seven – Windows Mobile Device Center).

Ну, понеслась вода по трубам!
Создаем новый проект. File-New-Project-Visual C#-Smart Device-Smart Device Project, версию фреймворка выбрать 3.5, вводим имя проект (у меня Start_2440),

в следующем окне выбираем целевую платформу – Windows CE и шаблон – Device Application. Создастся новый проект и откроется дизайнер с пустой формой. Определимся, что будет делать наше первое приложение:
— нажатием кнопки можно включить или выключить светики на плате;
— отправить произвольный текст через СОМ-порт на другое устройство;
— подрыгать ножкой в разъеме GPIO
— отработать нажатие аппаратной кнопки на плате
Думаю для первого раза будет достаточно. Для начала выставим размер формы в 240 пикселей по ширине и 320 пикселей по высоте в свойствах формы. Добавим элементы интерфейса. Нам нужны четыре кнопки(Button), один TextBox, один ComboBox и один Label. Элемент mainMenu1 можно удалить, он нам не понадобится.

Зададим названия кнопкам и прочим элементам. Также добавим на форму элемент serialPort. Должно получиться следующее.

Откроем код, нажав кнопку “F7”. Там где задаются используемые namespace добавим namespace для работы с портами

Из скачанного архива с драйвером GPIO для работы с портами ввода-вывода необходимо в Solution Explorer добавить в проект файлы из папки GPIO (ее надо положить в папку с проектом)Pin.cs, PinConfiguration.cs, PinValue.cs и Port.cs

и в исходник добавить строку

Теперь сделаем так, чтобы можно было нажатием кнопок включать и выключать светики на плате. Они подключены к порту B к пинам 5, 6, 7 и 8. Для работы с пинами необходимо определить переменные типа Pin:

Читайте также:  Торговые терминалы для mac os

Связываем наши переменные с портами и пинами. У меня это сделано с собитии загрузки формы Form1_Load.

Распишу по порядку, что есть что:
Port.PORT_B — выбор порта
5 — прописываем номер пина (смотрим по схеме платы)
PinConfiguration.OUTPUT — режим работы пина, помимо OUTPUT можно выставить режим входа с подтяжкой(INPUT_WITH_PULLUP) и без подтяжки (INPUT_WITHOUT_PULLUP)
PinValue.HIGH — задаем лог. «1» на выходе или PinValue.LOW – лог. «0»
Теперь пины 5, 6, 7 и 8 порта В соединены со светодиодами, подавая на них «1» мы выключаем светики, подавая «0» — включаем. Напишем обработчики нажатия кнопок “LED on” и “LED off”:
Включаем

Для работы с СОМ-портом необходимо добавить в событие Form1_Load следующую конструкцию

Теперь при запуске приложения в комбобоксе будет список всех имеющихся СОМ-портов в системе и можно выбирать нужный нам. Теперь напишем обработчик нажатия кнопки “Open”, которой мы будем открывать СОМ-порт, предварительно выбранный в комбобоксе.

Чтобы отправить что-то через СОМ-порт напишем обработчик нажатия кнопки “Send”, чтобы по ее нажатию отправлялся текст из текстбокса.

Фиксировать нажатие кнопки будем по таймеру. Для этого добавим на форму компонент Timer и выставим время между тиками в 1 мс. В ту часть кода, где мы объявляем переменные типа Pin необходимо добавить переменную для нашей кнопки (я взял кнопку №1, которая подключена к пину 0 порта G.

В обработчик события timer1_Tick добавим следующее действие:

Теперь при нажатии кнопки 1 у нас текст label1 будет изменяться на текст Button 1 is pressed!
И последнее, пускай по срабатыванию таймера у нас меняется 1 и 0 на каком-нибудь пине, который расположен на разъеме GPIO (CON5 на схеме и на плате). Я выбрал EINT17, который соответствует пину 9 порта G.

В код обработки события таймера, перед кодом определения нажатия кнопки вставляем такую конструкцию

Не забудьте добавить переменную gpg9 типа Pin по аналогии с диодами и кнопкой.
Вживую все это выглядит так:

Включаем плату, с карты памяти запускаем нашу программу, жмем кнопочки — мигаем светодиодами, смотрим присутствующие СОМ-порты, смотрим реакцию на нажатие кнопки 1, смотрим на осциллографе дерганье 9-й ноги порта G. Заранее извиняюсь за качество видео, снимал старим фотиком с рук. Как появится какой-нибудь штатив — пересниму.

Программирование под Windows CE с помощью Embedded Visual C++, часть 1

Этот пост для настоящих программистов, которые вместо букваря учили алфавит по третьему изданию справочника по C++. Программировать под Windows CE будем на C++ с помощью Embedded Visual C++.

Итак, нам понадобятся:

1. eMbedded Visual C++ 4.0 (TRT7H-KD36T-FRH8D-6QH8P-VFJHQ)
2. eMbedded Visual C++ 4.0 service pack 4
3. ritti.exe
4. Microsoft Pocket PC 2003 SDK.msi
5. Microsoft ActiveSync
6. StandAlone Emulator

Данный комплект позволяет разрабатывать программы, которые запускаются на всех Windows Mobile, начиная с 2003. Забудьте про нововведения в Windows Mobile 5 и 6 (если только они вам не нужны :). Все эти продукты находятся через Гугл, но установить их немного тягомотно. Особенно надоедает Emulator, который требует установки следующих вещей в следующем порядке:

1. netsvwrap.msi
2. standalone_emulator_V1.exe
3. efp.msi
4. emulator_2_0.msi

Если Вы все еще здесь – продолжаем!

Вкратце отличия WinCE API от Win32 API таковы: только Unicode, отсутствие текущего каталога (только абсолютные пути), урезаны громоздкие вещи, наличие особенностей со вводом.

Я создавал кросс-платформенный продукт (под WinCE и Win32). Вот как это делается в двух словах. С помощью UNDER_CE различить платформу:

#ifdef UNDER_CE
// здесь код для только для Windows CE
#else
// здесь код для только для Windows 32
#endif

WinMain немного различается:

#ifdef UNDER_CE
int WINAPI WinMain(HINSTANCE h, HINSTANCE prev, LPTSTR line, int cmd)
#else
int WINAPI WinMain(HINSTANCE h, HINSTANCE prev, LPSTR line, int cmd)
#endif

Проще всего делать оба проекта UNICODE. Это упростит код. В STL для работы с UNICODE-строкой есть замечательный класс wstring. Литералы строковые выглядеть должны так:

Читайте также:  Чем линукс лучше для программирования

_T(«Goodbye, world!»)

_T() есть макрос, которые превратит строковый литерал в UNICODE или ASCII по надобности. Вместо char используем TCHAR.

Чтобы сделать проект UNICODE в Win32 задайте два preprocessor definitions: _UNICODE и UNICODE. В Embedded C++ это будет сделано по умолчанию.

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

wstring ApplicationPath()
<
TCHAR Path[MAX_PATH + 1] = <0>;
int n = GetModuleFileName(0, Path, MAX_PATH);
while (—n > 0 && Path[n] != _T(‘\\’) && Path[n] != _T(‘/’))
Path[n] = 0;
return Path;
>

Вот так вот извращаемся, если нужно что-то только под Windows 32:

typedef DWORD (WINAPI *FUNC_GetGuiResources)(HANDLE, DWORD);
FUNC_GetGuiResources f_GetGuiResources = 0;

struct Win2000_Linkage < Win2000_Linkage() <
#ifndef UNDER_CE
f_GetGuiResources = (FUNC_GetGuiResources) GetProcAddress(GetModuleHandle(_T(«user32.dll»)), «GetGuiResources»);
#endif
> > Win2000_linkage;

int GetGuiResource(DWORD which)
<
#ifndef UNDER_CE
if (f_GetGuiResources == 0) return 0;
HANDLE h = OpenProcess(PROCESS_QUERY_INFORMATION, false, GetCurrentProcessId());
int n = f_GetGuiResources (h, which);
CloseHandle(h);
return n;
#else
return 0;
#endif
>

Вот еще странный кусок кода, который видимо появился из-за отсутствия прерывистой линии типа, составленной из точек на Win CE:

#ifdef UNDER_CE
#define DASH_STYLE PS_DASH
#else
#define DASH_STYLE PS_DOT
#endif

Под Win CE у нас как бы нету текущей позиции курсора, потому как сами понимаете. Следовательно, если она нужна, то запоминайте сами последнее событие от мыши и считайте эту позицию позицией курсора. Типа:

#ifdef UNDER_CE
POINT mouse = mouse_at;
#else
POINT mouse = WhereIsCursor();
#endif

Под Win CE отсутствует примитив Arc() (см. GDI).

Зато! Зато под Win CE есть все-таки что-то хорошее. Это хорошее – это встроенный в ОС браузер Chro. то есть Oper. то есть Inernet Explorer! Фуу, вспомнил название-таки! Он конечно немного попроще своего старшего брата, но ведь нам много и не нужно – просто красиво нам текст HTML нарисуй и все!

BOOL InitHTMLControl(
HINSTANCE hinst );

Теперича на окно можно добавить контрол с классом WC_HTML.
И заслать в него какой-нибудь HTML для отображения:
SendMessage(hwndHTML, WM_SETTEXT, 0, (LPARAM)»»);
SendMessage(hwndHTML, DTM_ADDTEXTW, FALSE, (LPARAM)TEXT(«Hello»));
SendMessage(hwndHTML, DTM_ADDTEXTW, FALSE, (LPARAM)TEXT(«World!»));
SendMessage(hwndHTML, DTM_ENDOFSOURCE, 0, (LPARAM)NULL);

Под Win 32 для схожих целей можно использовать контрол richedit.

Под Win CE нету GetPrivateProfileString, так что чтение и разбор INI-файлов ваша прерогатива.

При загрузке DLL под Win32 имя функции должно быть в ANSI. Хотя проект и под UNICODE. Почему? Потому что!

#ifndef UNDER_CE
string f_name = ANSI(func_name);
FARPROC f = GetProcAddress(h, f_name.data());
#else
FARPROC f = GetProcAddress(h, func_name);
#endif

Заодно держите и вот эти функции:

string ANSI(wstring w)
<
int l = WideCharToMultiByte(CP_ACP, 0, w.data(), w.size(), NULL, 0, NULL, NULL);
if (l)
<
char* buffer = new char[l + 1];
l = WideCharToMultiByte(CP_ACP, 0, w.data(), w.size(), buffer, l, NULL, NULL);
buffer[l] = 0;
string s(buffer);
delete[] buffer;
return s;
>
return «»;
>

wstring UniCODE(string w)
<
int l = MultiByteToWideChar(CP_ACP, 0, w.data(), w.size(), NULL, 0);
if (l)
<
TCHAR* buffer = new TCHAR[l + 1];
l = MultiByteToWideChar(CP_ACP, 0, w.data(), w.size(), buffer, l);
buffer[l] = 0;
wstring s(buffer);
delete[] buffer;
return s;
>
return _T(«»);
>

Вот как у меня выглядит начало h-файла, который включается в каждый компилируемый файл первым:

#pragma warning(disable: 4786)
#pragma once

#ifndef UNICODE
#error You must define UNICODE
#endif

#ifndef _UNICODE
#error You must define _UNICODE
#endif

#ifndef WINVER
#define _WIN32_WINNT 0x0400
#define WINVER 0x0400
#endif

#ifndef UNDER_CE
#include
#include
#define ASSERT(expr) _ASSERT(expr)
#define IDC_HAND MAKEINTRESOURCE(32649)
#define GR_GDIOBJECTS 0 /* Count of GDI objects */
#define GR_USEROBJECTS 1 /* Count of USER objects */
#define WS_NONAVDONEBUTTON 0
#include
#endif
#include «windows.h»
#include #include #include #include #include #include using namespace std;

Как видите я плотно использую STL и поэтому подгружаю ее классы в пространство имен по умолчанию.

Пока все, если понравилось в следующей части расскажу про всплывающую клавиатуру (SIP), определение ориентации экрана и его поворот, подстройка под размеры экрана, определение DPI и подстройка под него, магические пассы для появления в правом верхнем углу крестика закрывающего приложение (а не убирающего его неизвестно куда), всплывание напоминаний и пр.

Оцените статью