wince移植需要注意的问题

1、警告 104 warning C4482: 使用了非标准扩展: 限定名中使用了枚举“policy::InitResult”

class policy

{

public:

enum InitResult

{ FAILED,SUCCESS};

};


正确:FAILED,

错误:InitResult:FAILED

不需要枚举名称限制


2、 警告 89 warning C4503: “std::_Tree<_Traits>::_Myval”: 超出修饰名的长度,名称被截断C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\ce\include\vector203

// C4503.cpp  
// compile with: /W1 /EHsc /c  
// C4503 expected  
#include <string>  
#include <map>  
  
class Field{};  
  
typedef std::map<std::string, Field> Screen;  
typedef std::map<std::string, Screen> WebApp;  
typedef std::map<std::string, WebApp> WebAppTest;  
typedef std::map<std::string, WebAppTest> Hello;  
Hello MyWAT;
<span style="font-family: Arial, Helvetica, sans-serif;">解决: </span>
<span style="font-family: Arial, Helvetica, sans-serif;">// C4503b.cpp  </span>
// compile with: /W1 /EHsc /c  
#include <string>  
#include <map>  
  
class Field{};  
struct Screen2 {  
   std::map<std::string, Field> Element;  
};  
  
struct WebApp2 {  
   std::map<std::string, Screen2> Element;  
};  
  
struct WebAppTest2 {  
   std::map<std::string, WebApp2> Element;  
};  
  
struct Hello2 {  
   std::map<std::string, WebAppTest2> Element;  
};  
  
Hello2 MyWAT2;

3、警告 未找到下列环境变量:$(PLATFORMDEFINES)项目


4、全局变量和静态变量未初始化的问题

第一,  全局变量定义和初始化

例如,log4cxx使用的例子。

CREATE_LOGGERPTR_GLOBAL(logger_,logger_name)即定义了

log4cxx::LoggerPtrlogger_ = log4cxx::LoggerPtr(log4cxx::Logger::getLogger(logger_name));

在其他平台这样定义之后,直接使用LOG4CXX_INFO(logger_,message);即可。但是在wince 发现logger_为NULL。导致

内存错误。

 

也就是说,全局变量的定义是正确的,但是并没有被初始化。

主要有两种解决办法:第一,是把类的默认构造函数里进行初始化。第二是在借助其他函数来初始化,但因为是全局变量,需要避免被重复初始化。

第三,使用宏定义来代替一些全局的常量。

 

第二,  类内部定义的静态变量

例如,

classSQLPTRepresentation

{

public:

  conststatic std::string kDatabaseName;

}

//初始化

const std::string SQLPTRepresentation::kDatabaseName = "policy";

实际情况,kDatabaseName为空字符。

解决办法:第一,放在构造函数里初始化。第二,定义一个函数,返回这个常量。第三,宏定义。


从根本上这个问题的解决是工程设置的问题,解决办法就是把属性,链接器,入口函数设为空,否。解释见

点击打开链接

5、 Some kind of disk I/O error occurred

不要在共享内存里使用sqlite,或其他io操作。但文件读写是了是可以的

6、warning C4273: dll链接不一致

把工程属性运行时改成/MT


7、error C2275 将此类型用作表达式非法

主要是C语言编译器有一些规则要求,比如,变量定义必须放在函数开始的地方。

8、错误 1 fatal error LNK1112: 模块计算机类型“THUMB”与目标计算机类型“ARM”冲突 coredll.lib

在属性,链接器下的命令行里增加 /machine:THUMB即可解决

9、Databyte misalignment   字节对齐问题。

在赋值时,例如把char buf[13],的第3~6作为整数赋值给 int a;

如果直接a=(int)(&buf[3]);可能会报自己对齐问题。应该改成memcpy(&a,&buf[3],sizeof(int));

或者把他们进行拼接a=buf[3]+buf[4]<<8+buf[5]<<16+buf[6]<<24;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值