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

creating a LPCTSTR pointer to a string in VS2010

本文关键字:字符串 LPCTSTR 指针 VS2010 创建      更新时间:2023-10-16

我必须为CreateProcess提供LPCTSTR。

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

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

过程如下:

  1. 将路径转换为我正在使用的CreateProcess的正确格式执行字符替换(将单个替换为两个)GetModuleFileName的输出。这个输出从a开始然后将WCHAR缓冲区和I转换为std::string。
  2. 然后,我还需要将该字符串与最终文件名连接起来它可以是任何变量类型(我在程序中定义)。
  3. 完成的字符串进入CreateProcess LPCTSTR。

我尝试过使用其他类型的字符串,但到目前为止,我还没有发现任何连接和字符替换将工作。

我看到的每个解决方案都不能在Visual Studio 2010中工作,这就是我正在使用的。

LPCTSTR是指向const TCHAR*的指针,而不是指向const char*的指针。根据您的UNICODE_UNICODE设置,您将需要 std::wstringstd::string。如果您坚持使用std::string,那么您需要将c_str()返回的char*转换为wchar_t*字符串(或不依赖于UNICODE)。

为了让你的生活更轻松一点,我建议:

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