У меня проблема с несколькими устройствами Windows CE 5.0, которые практически полностью выходят из строя при выходе из режима ожидания (приостановки). Я сократил проблему до примерно 15 строк C ++, чтобы просто получить wxWidgets для отображения окна сообщения, и проблема возникнет, если я:
- Запустить приложение
- Приостановить работу устройства (под этим я подразумеваю кратковременное нажатие красной кнопки питания)
- Возобновить работу устройства
- Нажатие кнопки ОК в заголовке окна сообщения.
- БУМ
Эта проблема проявилась во многих других аспектах, прежде чем я сократил ее - при загрузке растрового изображения, при сканировании штрих-кода, все после того, как оно было приостановлено, а затем возобновлено.
Я использую следующее:
- Windows CE 5.0 Professional (устройство Motorola MC3090)
(также WM 6,5 (MC55), CE 6,0 (MC3190))
- Visual Studio 2005 SP2
- wxWidgets 2.8.10
- Microsoft Windows CE 5.0 Стандартный SDK
Фактическая отображаемая ошибка является спорадической и широко распространенной, но в основном это нарушение прав доступа, обычно рядом с начальным адресом вызова функции (обнаруживается это путем приостановки устройства, возобновления и последующего подключения отладчика VS к устройству). Проделав обширную домашнюю работу по этому вопросу, я прочитал несколько предложений о том, что может происходить какая-то кучная коррупция. Пока приложение не приостанавливается, оно всегда работает правильно для всех правильных комбинаций SDK и устройств.
Я также пробовал следующие SDK:
- MS Pocket PC 2003 SDK
- Symbol Platform SDK для MC3000c50a
- Symbol Platform SDK для MC3000c50b
- Windows Mobile 5.0 SDK
- Windows Mobile 6.0 SDK
Я протестировал следующие устройства:
- MC3090 (Windows CE 5.0) - та же проблема
- MC55 (Windows Mobile 6.5) - та же проблема
- MC3190 (Windows CE 6.0) - Проблема не возникает на этом устройстве со сборкой StandardSDK
Я слишком много играл с настройкой wxWidgets, всегда следя за тем, чтобы я связывал приложение с соответствующим соответствующим SDK.
Вот код, который вызывает эту проблему:
#include "wx/wxprec.h"
class Application : public wxApp {
public:
virtual bool OnInit();
};
bool Application::OnInit() {
wxMessageBox(L"Test");
return true;
}
IMPLEMENT_APP(Application)
Любой, у кого есть какой-нибудь совет, буду вечно благодарен! Пожалуйста, дайте мне знать, если я пропустил какие-либо важные детали.