首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

XE3 winexec施行失败

2013-03-04 
XE3 winexec执行失败 最近移植bcb6的项目到xe3,经历了两天终于移植完成,遇到个问题WinExec((const char *)

XE3 winexec执行失败
 最近移植bcb6的项目到xe3,经历了两天终于移植完成,遇到个问题

WinExec((const char *)Application->ExeName.c_str(), SW_SHOW);程序自启动失败
不加强制转换报错,类型不对,加了强制转换没有效果

[bcc32 Error] uMainFrame.cpp(512): E2034 Cannot convert 'wchar_t *' to 'const char *'
不知道是怎么回事 xe3 winexec
[解决办法]
改成WinExec(AnsiString(Application->ExeName).c_str(),SW_SHOW);
[解决办法]
unicode在作怪,呵呵

[解决办法]
unicode问题, String有三个转换成字符串指针的函数:
c_str() 这个应该是为了兼容旧版本的代码,返回类型为wchar_t *
w_str() 返回wchar_t *
t_str() 这个函数的返回值依赖工程选项中_TCHAR的映射类型,如果映射为char,返回char *,映射为wchar_t,返回wchar_t * 
如:
Project-->Options-->Directories and Conditionals-->_TCHAR maps to更改为wchar_t
然后在用到字符串的地方,用TEXT转:
ShellExecute(NULL, TEXT("open"), Application->ExeName.c_str(), NULL, NULL, SW_SHOWNORMAL);

如不想更改影射o wchar_t,这样
例:
WideString str="abc";  
AnsiString strResult=AnsiString(str);

热点排行