在为 Unicode 编译时,TCHAR
基于 - 的 API 映射到wchar_t
基于 - 的函数,而在为 ANSI/MCBS 编译时,它们映射到char
基于 - 的函数。
因此,在您的情况下,TCHAR
基于- 的CreateProcess()
宏映射到CreateProcessA()
获取char*
字符串或CreateProcessW()
获取wchar_t*
字符串。
std::string
仅char
使用,并且仅std::wstring
使用wchar_t
。
因此,解决您的问题的最简单方法是CreateProcessA()
直接调用,例如:
std::string z7Cmdline = ...;
std::string z7Arg = ...;
STARTUPINFOA si = {};
...
CreateProcessA(z7Cmdline.c_str(), & z7Arg[0], ..., &si, ...);
如果您想调用CreateProcessW()
,请std::wstring
改用:
std::wstring z7Cmdline = ;
std::wstring z7Arg = ...;
STARTUPINFOW si = {};
...
CreateProcessW(z7Cmdline.c_str(), & z7Arg[0], ..., &si, ...);
在后一种情况下,如果您的输入必须是std:string
,那么您必须使用运行时转换、 via MultiByteToWideChar()
、std::wstring_convert
等。
或者,您可以std::basic_string<TCHAR>
改用:
std::basic_string<TCHAR> z7Cmdline = ;
std::basic_string<TCHAR> z7Arg = ...;
STARTUPINFO si = {};
...
CreateProcess(z7Cmdline.c_str(), & z7Arg[0], ..., &si, ...);