针对ice部分代码修改问题
2014-07-03 11:25
344 查看
一、如何解决printf UTF8乱码问题
1、在启动icebox时,当网络故障产生报警时,打印的内容如下:
"璇曞浘璁块棶鏃犳晥鐨勫湴鍧€銆?"
2、增加编译的宏:CONVER_WS2S(E:\Ice-3.5.1\cpp\src\IceUtil\Makefile.mak)
CPPFLAGS = $(CPPFLAGS) -DICE_UTIL_API_EXPORTS -I.. -DWIN32_LEAN_AND_MEAN -DCONVER_WS2S
3、修改iceutil/unicode.cpp代码,增加如下代码ws2s和s2ws:
$cd E:\Ice-3.5.1\cpp\src\iceUtil
$nmake /f Makefile.mak
$nmake /f Makefile.mak install
5、上述的乱码真正打印的结果如下:
"试图访问无效的地址。"
二、ICE如何支持.net 3.5?
1、E:\Ice-3.5.1\cs\config\Make.rules.mak.cs使其FRAMEWORK开关打开:
#
# Define FRAMEWORK as 3.5 to force a .NET 3.5 build with Visual Studio 2010.
#
FRAMEWORK = 3.5
2、E:\Ice-3.5.1\cs\src\Ice\Makefile.mak
!if "$(FRAMEWORK)" == "3.5"
MCSFLAGS = $(MCSFLAGS) -define:DISENABLEDIPV6
!endif
3、修改源代码Network.cs如下
$cd E:\Ice-3.5.1\cs\src
$nmake /f Makefile.mak
$nmake /f Makefile.mak install
1、在启动icebox时,当网络故障产生报警时,打印的内容如下:
"璇曞浘璁块棶鏃犳晥鐨勫湴鍧€銆?"
2、增加编译的宏:CONVER_WS2S(E:\Ice-3.5.1\cpp\src\IceUtil\Makefile.mak)
CPPFLAGS = $(CPPFLAGS) -DICE_UTIL_API_EXPORTS -I.. -DWIN32_LEAN_AND_MEAN -DCONVER_WS2S
3、修改iceutil/unicode.cpp代码,增加如下代码ws2s和s2ws:
static std::string ws2s(const std::wstring& ws) { std::string curLocal = setlocale(LC_ALL, ""); const wchar_t* source = ws.c_str(); size_t wsize = 2 * ws.size() + 1; char* dest = new char[wsize]; memset(dest, 0, wsize); size_t converted = 0; wcstombs_s(&converted, dest, wsize, source, _TRUNCATE); std::string result = dest; delete []dest; return result; } static std::wstring s2ws(const std::string& s) { std::string curLocal = setlocale(LC_ALL, ""); const char* source = s.c_str(); size_t size = s.size() + 1; wchar_t* dest = new wchar_t[size]; memset(dest, 0, size); size_t converted = 0; mbstowcs_s(&converted, dest, size, source, _TRUNCATE); std::wstring result = dest; delete []dest; return result; }4、修改iceutil/unicode.cpp代码,增加宏开关:
string IceUtil::wstringToString(const wstring& wstr, ConversionFlags flags) { string target; #ifndef CONVER_WS2S size_t size = wstr.size() * 3 * (sizeof(wchar_t) / 2); Byte* outBuf = new Byte[size]; Byte* targetStart = outBuf; Byte* targetEnd = outBuf + size; const wchar_t* sourceStart = wstr.data(); ConversionResult cr = convertUTFWstringToUTF8( sourceStart, sourceStart + wstr.size(), targetStart, targetEnd, flags); if(cr != conversionOK) { delete[] outBuf; assert(cr == sourceExhausted || cr == sourceIllegal); throw UTFConversionException(__FILE__, __LINE__, cr == sourceExhausted ? partialCharacter : badEncoding); } string s(reinterpret_cast<char*>(outBuf), static_cast<size_t>(targetStart - outBuf)); s.swap(target); delete[] outBuf; #else target = ws2s(wstr); #endif return target; }4、重新编译安装
$cd E:\Ice-3.5.1\cpp\src\iceUtil
$nmake /f Makefile.mak
$nmake /f Makefile.mak install
5、上述的乱码真正打印的结果如下:
"试图访问无效的地址。"
二、ICE如何支持.net 3.5?
1、E:\Ice-3.5.1\cs\config\Make.rules.mak.cs使其FRAMEWORK开关打开:
#
# Define FRAMEWORK as 3.5 to force a .NET 3.5 build with Visual Studio 2010.
#
FRAMEWORK = 3.5
2、E:\Ice-3.5.1\cs\src\Ice\Makefile.mak
!if "$(FRAMEWORK)" == "3.5"
MCSFLAGS = $(MCSFLAGS) -define:DISENABLEDIPV6
!endif
3、修改源代码Network.cs如下
public static Socket createServerSocket(bool udp, AddressFamily family, int protocol) { Socket socket = createSocket(udp, family); # if !DISENABLEDIPV6 && !COMPACT && !UNITY && !__MonoCS__ && !SILVERLIGHT if (family == AddressFamily.InterNetworkV6 && protocol != EnableIPv4) { try { int flag = protocol == EnableIPv6 ? 1 : 0; socket.SetSocketOption(SocketOptionLevel.IPv6, SocketOptionName.IPv6Only, flag); } catch(SocketException ex) { closeSocketNoThrow(socket); throw new Ice.SocketException(ex); } } #endif return socket; }4、重新编译安装
$cd E:\Ice-3.5.1\cs\src
$nmake /f Makefile.mak
$nmake /f Makefile.mak install
相关文章推荐
- Java web项目 在线网络考试修改考试问题部分代码
- VS2008修改部分代码总重新编译整个工程或解决方案的问题解决
- 解决tomcat 热部署问题,避免每次修改某一个小部分代码就得重启一次项目。浪费时间
- 修改日期导致代码每次都重新编译的问题
- win7下修改注册表问题 模块"jscript.dll"已加载,但对DllRegisterServer的调用失败,错误代码为0x80004005 我是WIN7
- **web.config**页面传参部分乱码,通过修改webconfig 解决问题
- 解决在VS(winform)程序中无法在调试时修改代码的问题(也就是“编辑并继续”功能无效)
- 根据 crazycode的建议,修改通过IP控制权限访问网站的部分代码
- 通过比对版本和代码修改历史定位由于代码修改引发的新问题
- 借助weka实现的分类器进行针对文本分类问题的特征词选择实验(实验代码备份)
- 如果只修改部分代码如何避免整个工程重新编译
- mapreduce入门--参考雅虎hadoop入门,根据0.20版本修改部分代码
- 针对这一段时间ASP.NET版中比较集中突出的问题,我写了一个完整的页面,包含显示/修改/删除/添加/排序/合并/写文件/显示图片或文档,有详细代码注释
- 开源DIGG软件PBDigg2.0的修改(八):解决搜索文章结果出现代码的问题。
- windows XP中文件内容搜索仅能针对部分类型文件的问题
- win7下修改注册表问题 模块"jscript.dll"已加载,但对DllRegisterServer的调用失败,错误代码为0x80004005 我是WIN7
- 请大家看一下一个c语言中的链表问题,下面的代码是有错误的!!请大家说出错误的原因,以及修改的方法!!!
- 使用IdHttp获取网页代码出现的问题,只能得到部分代码,为什么,请大家帮忙
- wince下,修改private下的代码,如何进行快速编译,比如之编译自己修改部分的代码
- mini2440学习之——移植LCD驱动移植代码中相关的修改部分!