Собственное исключение Windows Mobile C # / C ++

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

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

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


person user75569    schedule 26.02.2010    source источник


Ответы (1)


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

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

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

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

Изменить:

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

person legends2k    schedule 26.02.2010