Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ IFileDialog/IShellItem::GetDisplayName不';无法使用Windows 7库_C++_Winapi_Com_Windows 7 - Fatal编程技术网

C++ IFileDialog/IShellItem::GetDisplayName不';无法使用Windows 7库

C++ IFileDialog/IShellItem::GetDisplayName不';无法使用Windows 7库,c++,winapi,com,windows-7,C++,Winapi,Com,Windows 7,这对于常规文件非常有效,但在通过Windows 7库文件夹获取文件时失败(E_INVALIDARG)(通过其正常路径访问同一文件时也有效)。报告说: SIGDN_FILESYSPATH(返回项的 文件系统路径(如果有)。仅限 报告SFU文件系统的项目 具有文件系统路径。当项目 没有文件系统路径,则为 在上调用IShellItem::GetDisplayName 该项将失败。在该UI中使用此名称 适用于在中向用户显示 有些情况下,但请注意,可能不是这样 必须为所有项目指定 但是使用SIGDN_NO

这对于常规文件非常有效,但在通过Windows 7库文件夹获取文件时失败(E_INVALIDARG)(通过其正常路径访问同一文件时也有效)。报告说:

SIGDN_FILESYSPATH(返回项的 文件系统路径(如果有)。仅限 报告SFU文件系统的项目 具有文件系统路径。当项目 没有文件系统路径,则为 在上调用IShellItem::GetDisplayName 该项将失败。在该UI中使用此名称 适用于在中向用户显示 有些情况下,但请注意,可能不是这样 必须为所有项目指定

但是使用SIGDN_NORMALDISPLAY或所有其他SIGDN枚举也会失败

那么,当通过Windows7库获取文件时,如何获取完整路径呢

编辑1

我可以通过以下方式获取文件夹:

IFileDialog *pfd;
...
CoCreateInstance(CLSID_FileOpenDialog,NULL,
   CLSCTX_INPROC_SERVER,IID_PPV_ARGS(&pfd));
...
IShellItem *psiResult;
pfd->GetResult(&psiResult);
...
wchar_t *filepath;
psiResult->GetDisplayName(SIGDN_FILESYSPATH,&filepath);
...
但是GetDisplayName()不适用于pfd->GetResult(&psiResult)

编辑2

我发现什么不起作用,是在CoInitializeX中。我使用Conit_多线程,如果我将其更改为Conit_APARTMENTTHREADED,它就会起作用。

尝试调用

IShellItem *psiResult;
pfd->GetFolder(& psiResult); 
LPWSTR folderpath = NULL; 
psiResult->GetDisplayName(SIGDN_FILESYSPATH, & folderpath); 

在显示对话框之前。这对我有效。

您的第一个代码对我有效。是否使用空参数调用pfd->Show()?这是CoInitializ.eEx问题。无论如何,谢谢。
pfd->SetOptions(dwOptions | FOS_FORCEFILESYSTEM | FOS_PATHMUSTEXIST);