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