我必须将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::wstringstd::string。如果您对std::string感到困惑,则需要将char*返回的c_str()转换为wchar_t*字符串(或不依赖于UNICODE)。

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

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

10-07 12:15