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);