这是我第一次try 任何形式的COM.我正在try 以文件夹模式启动打开文件对话框.代码编译了,但应用程序无法启动,并且我得到了一个"Ordinal‘t Locate in the Dynamic Link Library"错误.有谁能找出可能导致这种情况的原因吗?任何帮助都将不胜感激.注意:代码基于我对MSDN示例和文档的解释.现在我知道它什么都做不了,我只是想让它显示对话框.
谢谢!
HRESULT OpenDirectory()
{
//Initialize the COM library
COINIT Init = COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE;
CoInitialize(NULL);
//CoCreate Folder Open Dialog Object
IFileDialog *pfd = NULL;
CLSID OpenFileID = CLSID_FileOpenDialog;
IID IFileDialog = IID_IFileDialog;
HRESULT hr = CoCreateInstance(&OpenFileID, NULL, CLSCTX_INPROC_SERVER, &IFileDialog, (void**) ( &pfd));
if (SUCCEEDED(hr))
{
IFileDialogEvents *pfde = NULL;
hr = OpenDirEventHandler(&pfde);
if (SUCCEEDED(hr))
{
//Hook the Event Handler
DWORD dwHook;
hr = pfd->lpVtbl->Advise(pfd, pfde, &dwHook);
if (SUCCEEDED(hr))
{
//flags
DWORD dwFlags;
hr = pfd->lpVtbl->GetOptions(pfd, &dwFlags);
if (SUCCEEDED(hr))
{
hr = pfd->lpVtbl->SetOptions(pfd, dwFlags | FOS_FORCEFILESYSTEM | FOS_PICKFOLDERS);
if (SUCCEEDED(hr))
{
hr = pfd->lpVtbl->Show(pfd, NULL);
if (SUCCEEDED(hr))
{
IShellItem *psiResult;
hr = pfd->lpVtbl->GetResult(pfd, &psiResult);
// We are just going to print out the
// name of the file for sample sake.
PWSTR pszFilePath = NULL;
hr = psiResult->lpVtbl->GetDisplayName(pfd, SIGDN_FILESYSPATH,
&pszFilePath);
if (SUCCEEDED(hr))
{
TaskDialog(NULL,
NULL,
L"CommonFileDialogApp",
pszFilePath,
NULL,
TDCBF_OK_BUTTON,
TD_INFORMATION_ICON,
NULL);
CoTaskMemFree(pszFilePath);
}
psiResult->lpVtbl->Release(psiResult);
}
}
}
}
pfd->lpVtbl->Unadvise(pfd, dwHook);
}
pfde->lpVtbl->Release(pfde);
}
pfd->lpVtbl->Release(pfd);
return 0;
}
HRESULT STDMETHODCALLTYPE FileOK(IFileDialog *pfd)
{
return 0;
}
HRESULT STDMETHODCALLTYPE SelectionChange(IFileDialog *pfd)
{
return 0;
}
HRESULT STDMETHODCALLTYPE DirOverwrite(IFileDialog *pfd)
{
return 0;
}
OpenDirEventHandler(IFileDialogEvents *pfde)
{
pfde->lpVtbl->OnFileOk = &FileOK;
pfde->lpVtbl->OnSelectionChange = &SelectionChange;
pfde->lpVtbl->OnOverwrite = &DirOverwrite;
}