2016-04-28 33 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