Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.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 Show不是IFileOpenDialog的成员_C_Com - Fatal编程技术网

C Show不是IFileOpenDialog的成员

C Show不是IFileOpenDialog的成员,c,com,C,Com,你好 我一直在与Microsoft Visual Studio 12合作,试图让COM程序正常工作。但是,我似乎无法访问IFileOpenDialog的相关函数和组件。我想这一定与我的收入有关。以下是错误消息: 错误1错误C2039:“显示”:不是“IFileOpenDialog”c:\users\deylian\desktop\p\main.c 213 1项目1的成员 错误2错误C2039:“GetResult”:不是“IFileOpenDialog”c:\users\deylian\des

你好

我一直在与Microsoft Visual Studio 12合作,试图让COM程序正常工作。但是,我似乎无法访问IFileOpenDialog的相关函数和组件。我想这一定与我的收入有关。以下是错误消息:

  • 错误1错误C2039:“显示”:不是“IFileOpenDialog”c:\users\deylian\desktop\p\main.c 213 1项目1的成员
  • 错误2错误C2039:“GetResult”:不是“IFileOpenDialog”c:\users\deylian\desktop\p\main.c 217 1 Project1的成员
  • 错误3错误C2039:“GetDisplayName”:不是“IShellItem”c:\users\deylian\desktop\p\main.c 220 1 Project1的成员
  • 错误4错误C2039:“发布”:不是“IShellItem”c:\users\deylian\desktop\p\main.c 226 1 Project1的成员
  • 错误5错误C2039:“发布”:不是“IFileOpenDialog”c:\users\deylian\desktop\p\main.c 229 1项目1的成员

    以下是包括:

    #包括
    #包括
    #包括
    #包括
    #包括
    #包括

    以及守则:

    HRESULT BasicFileOpen(){
    HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED |  COINIT_DISABLE_OLE1DDE);
    if(SUCCEEDED(hr)){
        IFileOpenDialog *pFileOpen = NULL;
        hr= CoCreateInstance(&CLSID_FileOpenDialog,
        NULL,CLSCTX_INPROC_SERVER,
        &IID_IFileOpenDialog,
        (void**)(&pFileOpen));
    
        if(SUCCEEDED(hr)){
            hr=pFileOpen->Show(NULL);
    
            if (SUCCEEDED(hr)){
                IShellItem *pItem;
                hr = pFileOpen->GetResult(&pItem);
                if (SUCCEEDED(hr)){
                    PWSTR pszFilePath;
                    hr = pItem->GetDisplayName(SIGDN_FILESYSPATH, &pszFilePath);
    
                    if (SUCCEEDED(hr)){
                        MessageBox(NULL, (LPCSTR)pszFilePath, (LPCSTR)"File Path", MB_OK);
                        CoTaskMemFree(pszFilePath);
                    }
                    pItem->Release();
                }
            }
            pFileOpen->Release();
        }
    }
    
    CoUninitialize();
    return hr;
    }
    

谢谢你的关注。祝您愉快。

在C中使用COM(与C++相反)时,您必须执行类似于
pFileOpen->pvtable->Show(pFileOpen,hwnd)
(我可能拼错了
pvtable
-我不记得确切的名称;请查看标题)。谢谢您的帮助。对它进行了一些挖掘,发现它是lpVtbl,因此最终它将类似于pFileOpen->lpVtbl->Show(pFileOpen,NULL)。