我有一个包含两个项目的 Windows 移动解决方案。一个用 C# 编写,另一个用 C++ 编写(编译成 dll 的非托管代码)。 用C#编写的部分从dll中调用一些C++函数来连接到服务器。
如果我打开我的应用程序并连接到服务器,一切正常。如果我最小化它,或者如果我在我的应用程序上打开另一个 Windows 移动应用程序并再次尝试连接到服务器,它会失败并显示 native 异常代码。 (异常代码:0xc000001d。)
知道当我最小化我的应用程序时我的 native 代码会发生什么吗?为什么它不再起作用了?该错误同时出现在模拟器和目标设备上。 我使用 Windows 6.1 Professional 和 CF 3.5
最佳答案
异常代码 0xc000001d 是 STATUS_ILLEGAL_INSTRUCTION。 IE。代码试图运行不属于处理器指令集的指令。
这可能是由于多种原因:
- 堆栈损坏(因为数组溢出)
- 损坏的 dll/二进制文件
查看处理窗口状态变化(最小化/最大化/恢复)的代码。查看对 memcpy
、strcpy
等函数的任何调用是否处于半开状态。这些是不安全的功能 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/