C ++ SHGetFolderPath问题

时间:2012-07-12 12:04:05

标签: c++

我正在尝试获取本地“程序文件”目录路径并为其添加一些额外路径并执行它。无法让它正常工作..

这是我目前的代码:

wchar_t* localAppData = 0;
SHGetFolderPath(NULL, CSIDL_PROGRAM_FILESX86, 0, NULL, &localAppData);

wstringstream ss;
ss << localAppData << L"/MyApp/MyExe.exe";

CreateProcess(static_cast<void*>(localAppData));

我正在为SHGetFolderPath获取此信息:

cannot convert parameter 5 from wchar_t ** to LPWSTR

另外,即使我在标题中包含sstream,我也会收到这些错误:

'wstringstream' : undeclared identifier

注意:我正在使用SHGetFolderPath,因为我需要在XP和Vista / 7上使用它

修改

上面的代码中有一个错误,我试图运行localAppData这是“Program Files”目录的路径,而不是运行整个路径。

但是当我尝试在ss函数中使用localAppData var而不是CreateProcess var时,我收到有关使用错误类型的var的错误(需要使用LPCWSTR)。

但是当我尝试这个时,效果不好..没有错误,但应用程序没有运行,我错过了什么?

wchar_t localAppData[MAX_PATH];
STARTUPINFO sInfo;
PROCESS_INFORMATION pInfo;
SHGetFolderPath(NULL, CSIDL_PROGRAM_FILESX86, 0, NULL, localAppData);

std::wstringstream ss;
ss << localAppData << L"/MyApp/MyExe.exe";
LPCWSTR str = ss.str().c_str();
CreateProcess(str, NULL,NULL, NULL,FALSE,NULL,NULL,NULL,&sInfo,&pInfo);
return str;

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

wchar_t localAppData[MAX_PATH];
SHGetFolderPath(NULL, CSIDL_PROGRAM_FILESX86, 0, NULL, localAppData);
std::wstringstream ss;
  1. SHGetFolderPath需要指向调用者分配的数组的指针,并用结果路径填充它。

  2. 不要忘记std名称空间。

答案 1 :(得分:1)

SHGetFolderPath不会为您分配缓冲区并更改localAppData的值,因此它不接受wchar_t**,就像您在此处传递它一样。您需要自己分配缓冲区,例如:

whar_t localAppData[MAX_PATH];
SHGetFolderPath(NULL, CSIDL_PROGRAM_FILESX86, 0, NULL, localAppData);

关于wstringstream,你是using namespace std;吗?如果没有,则需要将类型指定为std::wstringstream