【发布时间】:2014-08-13 13:01:15
【问题描述】:
我想使用 Win API CreateProcess,它接受第二个参数为“LPTSTR”。
但我在 char 数组中有指向我的 exe 的路径。我的 VS2013 项目(静态库)是 Unicode 编码类型。 下面的代码片段。 在这一行
"appPath = (LPTSTR)TestEXEPath;"
在发生类型转换的以下代码 sn-p 中,我看到“appPath”中的字符被转换为一些垃圾字符,而该表达式“TestEXEPath”的 RHS 确实具有有效字符。 但是这里没有编译错误。在运行时,这些字符在“appPath”中被破坏。
我知道这种类型转换造成了这个问题。但是我该如何解决这个问题,如何将这个 char 数组类型转换为“CreateProcess() API 所需的 LPTSTR typr。
或者有没有更好的方法来避免char数组本身。
LPTSTR appPath;
char cwd[_MAX_PATH];
getcwd(cwd, _MAX_PATH);
char TestEXEPath[_MAX_PATH];
strcpy(TestEXEPath, cwd);
strcat(TestEXEPath, "\\pwrtest.exe /sleep /c:1");
appPath = (LPTSTR)TestEXEPath; // The characters in this gets converted to some junk characters.
.......................
......................
CreateProcess(NULL, appPath, NULL, NULL, FALSE, 0, NULL, workingDir, &sI, &pI))
【问题讨论】:
-
您可以首先使用
GetCurrentDirectory将其作为宽字符串获取。您还应该使用PathCombine的变体将文件名添加到路径中。
标签: c++ string visual-c++ casting lptstr