从NT向solaris 8移植C/C++应用

王朝c/c++·作者佚名  2006-01-31
窄屏简体版  字體: |||超大  

从NT向solaris 8移植C/C++应用

客户端:WINDOWS2000/XP

服务端:NT/SOLARIS/AIX等

最近在向solaris 8中移植应用(服务端应用),遇到的问题还不少。

该应用涉及到的东东有:

IBM MQ530相关,TUXEDO8.0 Xeces-c2.4 iconv zlib等

问题一:

在TUXEDO FML中的中文返回前端是乱码。但同样的代码在NT下没有问题。

说明:

在该系统中,服务端会将TUXEDO的FML转化为XML再以UTF-8的编码转到客户端,按常理,只要返回前端是的UTF-8的字符编码,应该没问题,因此先查返到前端的中文数据,发现果然不是UTF-8,后再服务端单独拿Xerces做实验,发现它的确有问题,因为当时服务端的本地编码应是GBK,但Xerces本身并不支持GBK,因此,把本地编码转成UTF-8时变得乱七八糟,后来用一种最快的方法解决了该问题,不用解析器,而是直接拼字符串,代码也不会很复杂,拼完后用iconv转成UTF-8即可。

问题二:

客户端的中文到服务端TUXEDO端后也是乱码

说明:

该问题其实与上面的问题是一样的,但处理却有很大不同,首先,由于前端XML数据复杂,因此必须选用解析器也不能靠自己去解析,其次,Xerces应该可以正常解析UTF-8的XML文档,为什么出来得不到UTF-8呢?原因是当从DOM中取得XMLCh型的字符串时,还要调用XMLString::transcode方法得到char *,但这过程中Xerces却自作聪明的想转成本地编码,结果转出来的东西乱七八糟不能使用,解决方法是从XMLCh用XMLFormatter直接让其输出UTF-8的字符串,再用iconv转成本地编码压入到FML。(从XMLCh到UTF-8的char *应该有比我更好的方法,欢迎指教)

问题三:

一运行到使用vector处便core dump!

说明:

试图push到vector的类型是一个结构体,大体如下:

struct a{

string a1;

string a2

}

后经查,在对结构体赋植前,对其进行了memset操作,类似:

memset(a, 0, sizeof(a));

去掉该操作后,一切正常,原因是,结构体内有复杂类型,应在构造函数中初始化才是安全的,但这些代码在NT下正常。

问题四:

压入FML内的数据出来后变成了0

说明:

原因是在Fadd时,该字段其实是short型,但却压入了一个int型,但FML的操作中只是压入了最初的两个字节,取出来时当然也只有最初压入的两个字节,这种代码在字节序不同的机器上运行的结果是不一样的。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航