2010-02-26 46 views
0

我有一個Windows Mobile解決方案,其中包含兩個項目。一個用C#編寫,另一個用C++編譯(編譯成dll的無限制代碼)。 用C#編寫的部分從dll調用一些C++函數來連接到服務器。Windows移動本機異常C#/ C++

如果我打開我的應用程序並連接到服務器,一切正常。如果我最小化它,或者如果我通過我的應用程序打開另一個Windows移動應用程序,並再次嘗試連接到服務器,它將失敗並顯示一個本機異常代碼。 (例外代碼:0xc000001d)

任何想法當我最小化我的應用程序時,我的本機代碼會發生什麼?爲什麼它不再工作?該錯誤出現在仿真器和目標設備上。 我使用Windows 6.1 Professional和CF 3.5

回答

1

異常代碼0xc000001d是STATUS_ILLEGAL_INSTRUCTION。即代碼試圖運行一條不屬於處理器指令集的指令。

這可能是因爲很多原因:

  • 堆棧損壞
  • 損壞的dll /二進制

請參閱處理窗口狀態改變的代碼(最小化(因爲數組溢出) /最大化/還原)。查看是否有任何對memcpystrcpy等功能的調用是半開的。這些是不安全的功能,secure equivalents可用後綴_s。檢查一些原始指針/數組操作是否超出其邊界而導致stack corruption。還要檢查dll的完整性,如果你確定這是由於dll中的代碼造成的。

編輯:

如果您是在DLL的源與您,與地圖文件生成ON(鏈接帕拉姆:/MAPINFO:EXPORTS)建立它。當拋出異常時,通常你會在發生崩潰的二進制文件中得到一個地址;這可以在地圖文件中查找,以知道它崩潰的確切函數(它是一個堆棧腐敗,確切的功能只會有所幫助,但它會給腐敗的附近)。進一步的細節見this article