IFileDialog与C语言兼容吗?

Is IFileDialog compatible with C?

本文关键字:语言 IFileDialog      更新时间:2023-10-16

问题不言自明。我有一个使用SHBrowseforfolder的程序,但现在他们想让我升级到IFileDialog,我做了,但在c++中,所以有可能让它与C一起工作吗?因为它是面向对象的?

IFileDialog是Microsoft的组件对象模型(COM)的一部分。COM编程可以用c语言完成,不过相当乏味。

这是一个教程(不能保证它的质量)

http://www.codeproject.com/Articles/13601/COM-in-plain-C

这是使用IFileDialog打印选定文件夹名称的C代码:

#include <shobjidl_core.h> //somewhere in your program
//...
IFileDialog *pfd;
IShellItem *psiResult;
PWSTR pszFilePath = NULL;
if (SUCCEEDED(CoCreateInstance(&CLSID_FileOpenDialog, NULL, CLSCTX_INPROC_SERVER, &IID_IFileOpenDialog, &pfd))){
  pfd->lpVtbl->SetOptions(pfd, FOS_PICKFOLDERS);
  pfd->lpVtbl->Show(pfd, hwnd);
  if (SUCCEEDED(pfd->lpVtbl->GetResult(pfd, &psiResult))){
    if (SUCCEEDED(psiResult->lpVtbl->GetDisplayName(psiResult, SIGDN_FILESYSPATH, &pszFilePath))){
      WCHAR *p = pszFilePath;
      while (*p){
        printf("%c",*p);//I don't like unicode
        p++;
      }
      CoTaskMemFree(pszFilePath);
    }
    psiResult->lpVtbl->Release(psiResult);
  }
  pfd->lpVtbl->Release(pfd);
}