Сегодня Стив Ласкер (Steve Lasker) в своем блоге анонсировал выпуск SQL Server Compact Edition 3.5 SP1.

  • Появился провайдер SSCE для ADO.NET Entity Framework.
  • Case-sensitive collations
  • Поддержка платформы x64

Ссылки для загрузки:

Previous ArticleNext Article
Технический директор IT-Dimension, компании-разработчика кросс-платформенного программного обеспечения

Leave a Reply

Your email address will not be published. Required fields are marked *

Р.

Работа с базами данных. Собираем SQLite для Windows Mobile

SQLite – это встраиваемый движок баз данных. Слово «встраиваемый» означает, что SQLite не использует парадигму клиент-сервер, то есть движок SQLite не является отдельно работающим процессом, с которым взаимодействует программа, а предоставляет библиотеку, с которой программа компонуется и движок становится составной частью программы. Это значит, что для своей работы SQLite не требует установки. Это, а также довольно простой набор API-функций, делает ее наиболее простым инструментом для разработки приложений, использующих в своей работе базы данных.

Чтобы начать работу с SQLite нам необходимо загрузить исходный код библиотеки с официального сайта http://sqlite.org. На официальном сайте SQLite есть возможность загрузить уже собранные бинарные версии библиотеки для Windows, Linux и Mac OS X. Но во-первых, Windows Mobile в списке платформ, для которых SQLite доступна в бинарном виде, отсутствует, а во-вторых, индейцы не ищут легких путей, да и при сборке SQLite со статической линковкой CRT библиотек можно избежать зависимости от Microsoft Visual C++ Runtime не таскать за собой дополнительные файлы.
Для работы лучше использовать версию исходного кода SQLite в виде одного файла. На сайте в разделе загрузок он имеет название sqlite-amalgamation-x_y_z.zip, где x, y, z представляют собой версию библиотеки.
Итак, начнем. Превым делом нам необходимо создать проект статической библиотеки. Для этого в Visual Studio выбираем пункт меню File -> New -> Project, идем в раздел Visual C++ -> Smart Device, выбираем тип проекта Win32 Smart Device Project, указываем имя проекта sqlite3, жмем OK.

Создаем проект SQLite3 для Smart Device в Visual Studio
Создаем проект SQLite3 для Smart Device в Visual Studio

После этого на экране появится мастер настройки параметров нового проекта. Идем в раздел Platforms и выбираем платформы для которых мы хотим собрать нашу библиотеку. Рекомендую выбирать все теоретически необходимые платформы, т.к. это намного проще чем потом добавлять их в проект с помощью Configuration Manager.
Выбираем платформы для сборки SQLite для Windows Mobile
Выбираем платформы для сборки SQLite для Windows Mobile

В разделе Application Settings указываем тип проекта Static Library и убираем маркер с Precompiled header, жмем Finish.
Выбираем тип проекта для сборки SQLite3
Выбираем тип проекта для сборки SQLite3

Теперь у нас есть пустой проект, в который нам нужно добавить исходный код из дистрибутива SQLite, а именно файлы sqlite3.h, sqlite3.c, sqlite3ext.h
После того как исходный код добавлен в проект, в Solution Explorer у нас должно получиться что-то подобное.
Вид Solution Explorer после добавления в проект исходного кода SQLite3
Вид Solution Explorer после добавления в проект исходного кода SQLite3

Это все. Об использовании SQLite я расскажу в своих следующих постах.

Н.

Настраиваем средства разработки для Windows Mobile (C++/wxWinCE) в Linux

Благодаря стараниям Станислава Блинова у нас появилась возможность разрабатывать ПО для Windows Mobile в Linux, используя компилятор cegcc и библиотеку wxWidgets. О том как настроить средства разработки для Windows Mobile под Linux рассказано в ниже следующей статье:

Захотелось мне тут выяснить, насколько “умерла” бесплатная разработка софта под WinCE. Великий Гугель вывел меня на штуку под названием cegcc – кросс-компилятор, позволяющий собирать WinCE приложения под Линуксом. После возвращения из осадка, в который я выпал, узрев данный инструмент, я решил его проверить на практике.

Проверка прошла успешно – приложения действительно собираются и работают. Правда, местами приходится кое-что править… И тогда захотелось экзотики, а именно – собрать с помощью cegcc библиотеку wxWinCE – порт wxWidgets для WinCE. Сделать это оказалось, мягко говоря, непросто, но все же реально.

В процессе поиска информации по данному вопросу я наткнулся на вот этот пост: http://article.gmane.org/gmane.comp.gnu.cegcc.devel/827. Erik van Pienbroek подкинул отличную шпаргалку. Его патчи действительно встали на ревизию 49149 и после небольшой доработки напильником она собралась. Правда, работала она, мягко говоря, плохо. Рисовала окна как попало, меню размещала вверху окна, само окно, кстати, зачем-то ополовинивала, ну и т.д. Но это уже было что-то.
Потом я умудрился адаптировать (напильник был большой) эти патчи к релизу 2.8.9, т.е. так же собрать сам релиз и получить такую же библиотеку с весьма странным поведеением. И уже только потом стал разбираться, что же не так. Оказалось все достаточно просто – всего лишь правильно указать версию и тип системы… Ну да хватит, как говорится, от слов – к делу!

Далее я опишу способ, как собрать wxWinCE-2.8.9 для PocketPC. Для начала определимся с исходными данными. Система, на которой все это производилось – Debian Lenny:

Linux 2.6.26-1-686 #1 SMP Thu Oct 9 15:18:09 UTC 2008 i686 GNU/Linux

Перечень вещей, которые понадобятся:

  • bison, yacc
  • mingw32ce
  • Bakefile
  • wxWidgets-2.8.9
  • Патч для wxWidgets
  • Файл autogen.mk

Итак, приступим…
Марлезонский балет, часть первая. Установка mingw32-ce.

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

  • Если у вас вдруг нету, поставьте bison и yacc (для Debian ставятся через apt-get).
  • Нужно взять с svn текущую версию cegcc:
$ svn co https://cegcc.svn.sourceforge.net/svnroot/cegcc/trunk/cegcc cegcc

Когда скачается, в текущей директории появится директория cegcc.

$ cd cegcc/src
$ mkdir build-mingw32ce

Собирать в корне исходников скрипт не даст, сам попросит создать директорию.

$ cd build-mingw32ce
$ sh ../build-mingw32ce.sh

Все, пошла сборка (и установка). По умолчанию компилятор встанет в /opt/mingw32ce. Этот путь можно поменять с помощью опции --prefix к скрипту (например ../build-mingw32ce.sh --prefix=/my/super/puper/dir/mgwce)

После установки компилятора добавьте /opt/mingw32ce/bin (соответственно, если вы не меняли префикс) в PATH. На Debian это можно сделать в /etc/profile.

С компилятором все, переходим ко второй части балета.

Сборка wxWinCE

  1. Нам понадобится Bakefile. Если его нет (или если он древнее, чем 2.3.0) – взять можно на www.bakefile.org. Эта утилита будет новые Makefile’ы создавать.
  2. Теперь надо скачать архив wxWidgets-2.8.9 и куда-нибудь его распаковать. Все остальные действия надо производить, находясь в директории wxWidgets-2.8.9. (Здесь и далее на скриншотах зеленым выделены моменты, на которые стоит обратить внимание).
  3. tar xzf wxWidgets-2.8.9.tar.gz
  4. Прилагаемый файл autogen.mk помещается в директорию build. Затем можно применить патч.
  5. cp /home/capricorn/work/articles/mingw32ce-wxWinCE/autogen.mk build
    patch -p0 /home/capricorn/work/articles/mingw32ce-wxWinCE/wxWinCE.patch-2
    
  6. Немного поправим WinCE SDK, а именно – файл /opt/mingw32ce/arm-mingw32ce/include/aygshell.h. Нужно добавить в него следующие строки:
    #define COMCTL32_VERSION 0x020e
    #define SHA_INPUTDIALOG  0x00000001
    #define GN_CONTEXTMENU   1000
    #define SHRG_RETURNCMD   0x00000001
    

    Эти определения присутствуют в “родном” aygshell.h из Windows Mobile 5.0 SDK. При желании можете посмотреть, где точно они располагаются в этом файле, и добавить их в те же места.

  7. Этот шаг необходимо выполнить, если Bakefile у вас не 2.3.0 (здесь я отметил файлы, которые должны быть заменены). Путь /usr/local/share/aclocal, естественно, действителен для Debian. На другой системе может быть другим.

    cp /usr/local/share/aclocal/bakefile* build/aclocal
    
  8. Теперь нужно создать новые билд-скрипты

    ./autogen.sh && make -f build/autogen.mk
    

    Процесс займет некоторое время, в результате должно получиться примерно следующее:

  9. Выполнение этого шага сконфигурирует среду на сборку статической монолитной библиотеки с поддержкой юникода. Опция --prefix нужна, чтобы указать, куда впоследствии будет инсталлироваться wxWinCE. Поскольку mingw32ce у меня лег в /opt, wxWinCE я решил положить рядышком, так что я выбрал --prefix=/opt/wxWinCE-2.8.9:

    По завершении конфигурации вы должны получить такую картину:
  10. Теперь остается только выполнить $ make И можно смело идти пить кофе. Когда же, наконец-таки, все будет собрано, останется только проинсталлировать:
    $ sudo make install
    

    Последний шаг нужно выполнять от имени root’а (если только вы не поставили в --prefix директорию, в которую вам разрешена запись). Так что – либо sudo, либо su.

    Вот и все. Теперь можно смело собирать сэмплы или свои собственные приложения. Для получения флагов компилятора не забывайте использовать <prefix>/bin/wx-config. Примерно таким же образом можно собрать и динамическую, и debug библиотеку (см. configure --help). Вот только чтобы собрать wxWinCE для смартфона надо руками править configure. К сожалению, я не спец по autotools. То, что было необходимо подправить – догадался, откопал, подсмотрел… А по-хорошему надо бы дописать строчки в configure.in, чтобы после autogen скрипт configure позволял бы с помощью опций указать версию WinMobile и тип платформы. Но это уже будет, видимо, другая история…