在VS2010中创建一个指向字符串的LPCTSTR指针

时间:2014-06-11 14:16:05

标签: c++ string visual-studio-2010

我必须将LPCTSTR输入CreateProcess。

简短的问题是如何将std :: string转换为LPCTSTR?  (LPCTSTR lpApplicationName = (LPCTSTR)FilePath.c_str();不起作用,CreateProcess只是忽略它,我知道我正在使用的路径等是正确的,因为如果我放入LPCTSTR lpApplicationName = L"a//test//path//and//file";)它会完美地工作。

长问题(为什么我需要这样做)是:这个LPCTSTR必须包含我希望运行的文件的路径和名称。

过程是:

  1. 为我的CreateProcess获取正确格式的路径 执行字符替换(用双\替换单\) GetModuleFileName的输出。此输出以a开头 然后我将WCHAR缓冲区转换为std :: string。
  2. 然后我还需要将此字符串与最终文件名连接起来 它可以是任何变量类型(我在程序中定义它)。
  3. 完成的字符串进入CreateProcess LPCTSTR。
  4. 我已经尝试过使用其他种类的字符串,但到目前为止我还没有发现任何连接和字符替换都可以使用。

    我见过的每个解决方案都不适用于我正在使用的Visual Studio 2010。感谢所有的建议。

1 个答案:

答案 0 :(得分:3)

LPCTSTR是指向const TCHAR*的指针,而不是const char*。根据您的UNICODE_UNICODE设置,您需要 std::wstringstd::string。如果您遇到std::string,则需要将char*返回的c_str()转换为wchar_t*字符串(或不取决于UNICODE)。

为了让自己的生活更轻松,我建议:

    #ifdef _UNICODE
        typedef std::wstring tstring;
    #else
        typedef std::string tstring;
    #endif