2016-04-28 111 views
1

Win32平臺上的代碼可以正確編譯,但是對於WinCe平臺,它在調試模式下會導致很多錯誤。這些錯誤與頭文件cstdio,cstring和cwchar相關。Win CE 7平臺上的錯誤c2039和錯誤c2873

微軟的Visual Studio 9.0 \ VC \ CE \包括\ cstdio(82):錯誤C2039: '_gets_instead_use_StringCbGetsA_or_StringCchGetsA':不是 '`全局命名空間'」

錯誤C2873成員: '_gets_instead_use_StringCbGetsA_or_StringCchGetsA':符號「sprintf_instead_use_StringCbPrintfA_or_StringCchPrintfA」::不能在使用聲明

錯誤C2873中使用的符號不能在使用聲明

CE7 \可以使用包括\ cwchar(66):錯誤C2873:「swprintf_instead_use_StringCbPrintfW_or_StringCchPrintfW」:符號不能使用 在使用聲明

\包括\ ARMV4I \ stdlib.h中(146):錯誤C2065:_malloca':未聲明的標識符

回答

1

我所做的一切就是改變我的包含文件的順序。我把「winsock2.h」頭文件放在其他頭文件之後。現在我沒有得到這些錯誤。

Before I had: 
#include <winsock2.h>               
#include <vector>          
#include <map>  
#include <string>      

After: 
#include <vector> 
#include <map> 
#include <string> 
#include <winsock2.h> 
1

的後綴通常連接到的同時具有8位的功能ASCII版本和16位unicode版本(後者通常以W爲後綴)。 Windows CE本身只支持unicode,因此如果您嘗試構建使用ASCII的代碼,則可能有問題。在標準C/C++庫中有一部分ASCII函數的實現,它提供了最常用的函數和對象,但是你所引用的函數和對象可能不在那裏。 您可以嘗試定義UNICODE和_UNICODE來構建該代碼的「W」版本,希望它的任何部分都不會假定1個字符= 1個字節。

+0

Thanks @Valter Minute。但似乎我正在使用C運行時庫的那些函數可用於win32,但不適用於wince。我在調試模式下得到了上面提到的錯誤。當我更改爲發佈模式時,在cstdio頭文件中出現以下錯誤。 1> c:\ Program Files \ Microsoft Visual Studio 9.0 \ VC \ ce \ include \ cstdio(64):error C2143:語法錯誤:在''之前缺少'{'是否必須對命名空間執行某些操作? #if _GLOBAL_USING _STD_BEGIN using :: _ Filet; – Habib

+0

它是否也失敗與UNICODE設置? –

+0

是的,我在項目的預處理器定義中包含了UNICODE。但它沒有幫助。 – Habib