Собственное исключение Windows Mobile C # / C ++ - PullRequest
0 голосов
/ 26 февраля 2010

У меня есть решение для Windows Mobile, которое содержит два проекта. Один написан на C #, а другой на C ++ (неуправляемый код, который компилируется в dll). Часть, написанная на C #, вызывает некоторые функции C ++ из dll для подключения к серверу.

Если я открываю свое приложение и подключаюсь к серверу, все работает нормально. Если я сверну его или открою другое приложение Windows Mobile поверх своего приложения и попытаюсь снова подключиться к серверу, произойдет сбой с собственным кодом исключения. (Код исключения: 0xc000001d.)

Есть идеи, что происходит с моим собственным кодом, когда я минимизирую свое приложение? Почему это больше не работает? Ошибка появляется как на эмуляторе, так и на целевом устройстве. Я использую Windows 6.1 Professional и CF 3.5

1 Ответ

1 голос
/ 26 февраля 2010

Код исключения 0xc000001d: STATUS_ILLEGAL_INSTRUCTION . То есть код пытался выполнить инструкцию, которая не принадлежит набору команд процессора.

Это может быть по многим причинам:

  • повреждение стека (из-за переполнения в массивах)
  • поврежденный dll / бинарный

См. Код, который обрабатывает изменения состояния окна (минимизировать / развернуть / восстановить). Посмотрите, являются ли какие-либо вызовы таких функций, как memcpy, strcpy и т. Д. Несерьезными. Это небезопасные функции, для которых безопасные эквиваленты доступны с суффиксом _s. Проверьте, записывает ли какая-либо необработанная манипуляция указателя / массива за ее пределы, чтобы вызвать повреждение стека . Также проверьте целостность dll, если вы уверены, что это из-за кода в dll.

Edit:

Если у вас есть источник DLL, создайте его с включенным генерацией файла карты (Linker Param: /MAPINFO:EXPORTS). И когда выдается исключение, обычно вы получаете адрес внутри двоичного файла, где происходит сбой; это можно посмотреть в файле карты, чтобы узнать точную функцию, в которой происходит сбой (если это повреждение стека, точная функция только немного поможет, но даст окрестность повреждения). Подробнее см. в этой статье .

...