c# - Windows Mobile native 异常 C#/C++

标签 c# c++ windows-mobile native

我有一个包含两个项目的 Windows 移动解决方案。一个用 C# 编写,另一个用 C++ 编写(编译成 dll 的非托管代码)。 用C#编写的部分从dll中调用一些C++函数来连接到服务器。

如果我打开我的应用程序并连接到服务器,一切正常。如果我最小化它,或者如果我在我的应用程序上打开另一个 Windows 移动应用程序并再次尝试连接到服务器,它会失败并显示 native 异常代码。 (异常代码:0xc000001d。)

知道当我最小化我的应用程序时我的 native 代码会发生什么吗?为什么它不再起作用了?该错误同时出现在模拟器和目标设备上。 我使用 Windows 6.1 Professional 和 CF 3.5

最佳答案

异常代码 0xc000001d 是 STATUS_ILLEGAL_INSTRUCTION。 IE。代码试图运行不属于处理器指令集的指令。

这可能是由于多种原因:

  • 堆栈损坏(因为数组溢出)
  • 损坏的 dll/二进制文件

查看处理窗口状态变化(最小化/最大化/恢复)的代码。查看对 memcpystrcpy 等函数的任何调用是否处于半开状态。这些是不安全的功能 secure equivalents带有 _s 后缀。检查一些原始指针/数组操作是否超出其边界写入导致 stack corruption .如果确定是因为 dll 中的代码,还要检查 dll 的完整性。

编辑:

如果您有 DLL 的源代码,请在打开映射文件生成的情况下构建它(链接器参数:/MAPINFO:EXPORTS)。当异常被抛出时,通常你会在发生崩溃的二进制文件中得到一个地址;这可以在映射文件中查找,以了解它崩溃的确切函数(这是堆栈损坏,确切的函数只会帮助一点点,但它会给出损坏的附近)。参见 this article了解更多详情。

关于c# - Windows Mobile native 异常 C#/C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2341986/

相关文章:

c++ - 比较数组c++中的项目

c++ - 如何实现原子(线程安全)和异常安全的深拷贝赋值运算符?

c# - 部分类或 "chained inheritance"

c# - 如何使用 LINQ 将 TypeA 的嵌套数据结构转换为 TypeB

c++ - 在 C++ 中每 10 毫秒执行一次函数

c++ - Dvorak SIP 未在某些设备(如 Pidion)中显示

C# Bitblit 从 Bitmap 到控制(Compact Framework)

c++ - Windows Mobile/Pocket PC : How do I change the border color of focused/unfocused CEdit, MFC 或 Win32 中的 CListCntl、CButton

c# - 引用 com 程序集 dll 时出现问题

c# - 使用构建后操作创建 nuget 包