Windows CE — Работа с пользовательскими SDK
При работе с пользовательским SDK для Windows CE Qt предоставляет простой способ добавить его поддержку в вашу среду разработки. Следующий учебник охватывает создание спецификации для Qt для платформ Windows CE.
Создание пользовательской спецификации сборки
Создайте подкаталог в папке mkspecs каталога Qt. Новые спецификации для Qt для Windows CE следуют этой схеме именования:
wince<version><SDK-shortcut>-[architecture]-msvc2005
Использование этой схемы позволяет qmake определить, что вы собираете Qt для Windows CE, и соответственно настроить процесс компиляции.
Создайте файлы qmake.conf и qplatformdefs.h внутри нового каталога спецификации. Обратитесь к реализации других спецификаций Windows CE, включенных в каталог mkspecs, чтобы увидеть, что необходимо для успешной сборки Qt для Windows CE.
Настройка параметров
По сравнению с настольными версиями, Qt для Windows CE требует двух дополнительных параметров:
- CE_SDK указывает имя SDK.
- CE_ARCH указывает информацию о целевой архитектуре.
Ниже приведен пример конфигурации для пользовательского SDK, который мы называем «CustomSDK»:
CE_SDK = Windows Mobile 5.0 Pocket PC SDK CE_ARCH = ARMV4I
Примечание: Запуск qmake для генерации файлов проекта Visual Studio для Windows CE в настоящее время не производит корректный результат.
Кроме того, большинство SDK Windows CE используют дополнительные параметры компилятора. Их можно указать, расширив значение DEFINES.
Например, с CustomSDK переменная DEFINES расширяется следующим образом:
DEFINES += QT_NO_CLIPBOARD QT_NO_ACCESSIBILITY QT_NO_NATIVE_GESTURES QT_NOSTANDARDSHELL_UI_MODEL _CRT_SECURE_NO_DEPRECATE _WIN32_WCE=0x700 $$CE_ARCH _AMRV7_ armv7 _ARM_
Перекрестная среда компиляции для пользовательского SDK
Qt для Windows CE требует только того, чтобы mkspec, указанный с помощью -xplatform, был настроен, как описано выше.
Выбор среды пользовательского SDK будет происходить путем конкатенации CE_SDK и CE_ARCH. Это создает строку, которая может быть найдена в «%ProgramFiles%\Microsoft Visual Studio 9.0\VC\vcpackages\WCE.VCPlatform.xml» и содержит правильную среду. Если вы не уверены в имени SDK и архитектуре для вашего SDK, вы можете найти её в этом файле.
Компиляция Qt для пользовательского SDK
Windows CE обладает высокой настраиваемостью, поэтому некоторые SDK могут иметь упрощённую настройку. В зависимости от конфигурации SDK Qt может не скомпилироваться в своей стандартной конфигурации, так как Qt для Windows CE предназначен для совместимости со стандартной настройкой SDK. Каждый Makefile, сгенерированный qmake и не помеченный для сборки для хостовой системы, будет собирать проекты WindowsCE для SDK, с которым был собран Qt. Нет необходимости устанавливать пользовательскую среду помимо среды Visual Studio 2005/2008.
Однако, возможно исключить функции Qt и создать версию, которая будет компилироваться для желаемого SDK.
Запуск приложений Qt на пользовательском устройстве
Иногда устройство Windows CE создано с конфигурацией, отличной от конфигурации соответствующего SDK. В этом случае символы, которые были доступны на этапе компоновки, могут отсутствовать в библиотеках выполнения.
К сожалению, операционная система не выдаст сообщение об ошибке, в котором указаны отсутствующие символы. Вместо этого появится окно с сообщением:
app.exe is not a valid CE application!
Чтобы определить отсутствующие символы, необходимо создать временное приложение, которое пытается динамически загрузить библиотеки Qt для Windows CE с использованием LoadLibrary. Для этого можно использовать следующий код:
wchar_t* libraries[] = {
L"QtCore4.dll",
L"QtGui4.dll",
0
};
for (int i = 0; libraries[i] != 0; ++i) {
HINSTANCE instance = LoadLibraryW(libraries[i]);
OutputDebugStringW(libraries[i]);
if (instance != NULL) {
OutputDebugStringW(L" : Successfully instantiated\n");
FreeLibrary(instance);
} else {
OutputDebugStringW(L" : Could not be loaded\n");
}
} После компиляции и развертывания приложения, а также библиотек Qt, запустите удаленный отладчик. Отладчик затем отобразит порядковый номер неразрешённого символа.
Поищите части Qt, которые полагаются на эти функции, и отключите их с помощью функциональности QFeatures.
По нашему опыту, когда приложения Qt не запускаются на Windows CE, это обычно связано с отсутствием символов для следующих классов или функций:
Обратитесь к документации Microsoft здесь за информацией о том, что такое порядковые номера и как их можно создать. Информация о получении соответствующего имени символа по заданному порядковому номеру также доступна в документации Microsoft.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.6/windowsce-customization.html