打开文件资源管理器并选择C、Win32中的输入文件[已关闭]

guykilcj  于 2022-12-22  发布在  其他
关注(0)|答案(1)|浏览(95)

19小时前关门了。
Improve this question
通过使用C语言中的Win32 API,我试图打开一个文件资源管理器,让用户选择一个文件,该文件的绝对路径将被放入其他函数中。
我看了微软的资源[1-2],为了尝试使用CoCreateInstance。然而,他们指定应该给出五个输入,而在[1]和[2]中的每一个其他示例,都只给出四个输入。只用四个输入编译会给我带来MinGW的GCC错误。
我怎样才能从用户通过文件资源管理器指定的文件中创建和检索绝对路径?
此外,是否可以在文件资源管理器中应用过滤器,以便只查看指定的文件?我只能看到这在C#中是可能的,而不是C [3]。

iovurdzv

iovurdzv1#

我怎样才能从用户通过文件资源管理器指定的文件中创建和检索绝对路径?
当调用CoCreateInstance()时,你必须给予它5个参数。在许多例子中看到的IID_PPV_ARGS只是一个预处理器宏,它是为了方便以类型安全的方式生成最后2个参数而提供的,但它不是必需的。你可以手动提供最后2个参数,只要你小心使用它们。例如:

IFileDialog *pfd = NULL;
CoCreateInstance(CLSID_FileOpenDialog, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pfd));

其实就和这个一样:

IFileDialog *pfd = NULL;
CoCreateInstance(CLSID_FileOpenDialog, NULL, CLSCTX_INPROC_SERVER, __uuidof(IFileDialog), (void**)&pfd);

又称:

IFileDialog *pfd = NULL;
CoCreateInstance(CLSID_FileOpenDialog, NULL, CLSCTX_INPROC_SERVER, IID_IFileDialog, (void**)&pfd);

此外,是否可以对文件资源管理器应用过滤器,以便只看到指定的文件?
是。使用IFileDialog::SetFileTypes()IFileDialog::SetFileTypeIndex()方法。

相关问题