我必须将LPCTSTR输入到CreateProcess中。
简短的问题是如何将std :: string转换为LPCTSTR?
(LPCTSTR lpApplicationName = (LPCTSTR)FilePath.c_str();
不起作用,CreateProcess只会忽略它,我知道路径等。我使用的是正确的,因为如果放在LPCTSTR lpApplicationName = L"a//test//path//and//file";
中,它可以很好地工作)。
一个很长的问题(为什么我需要这样做)是:该LPCTSTR必须包含我要运行的文件的路径和名称。
该过程是:
为了使路径进入CreateProcess的正确格式
执行字符替换(用双\代替单\)
GetModuleFileName的输出。此输出开始为
WCHAR缓冲区,然后我将其转换为std :: string。
然后,我还需要将该字符串与最终文件名连接起来
可以是任何变量类型(我在程序中定义)。
完成的字符串进入CreateProcess LPCTSTR。
我尝试使用其他类型的字符串,但到目前为止,我还没有发现任何可以使用串联和字符替换的字符串。
我所看到的每个解决方案都无法在Visual Studio 2010中使用,这就是我正在使用的解决方案。我们非常感谢所有建议。
最佳答案
LPCTSTR
是指向const TCHAR*
而不是const char*
的指针。根据您的UNICODE
和_UNICODE
设置,您将需要std::wstring
或std::string
。如果您对std::string
感到困惑,则需要将char*
返回的c_str()
转换为wchar_t*
字符串(或不依赖于UNICODE
)。
为了让自己的生活更轻松一点,我建议:
#ifdef _UNICODE
typedef std::wstring tstring;
#else
typedef std::string tstring;
#endif