【发布时间】:2019-12-01 18:15:56
【问题描述】:
我正在编写一个实现IInitializeWithFile 的缩略图提供程序,但是传递给初始化方法的文件路径无效。
- 我在
HKCR\CLSID\{CLSID of my thumbnail provider}的注册表中创建了"DisableProcessIsolation"值,以退出进程隔离,以便能够使用IInitializeWithFile/IInitializeWithItem而不是IInitializeWithStream。 - 我用
IInitializeWithStream测试了我的代码,效果很好。 从带有SHCreateStreamOnFile()的文件路径中检索IStream对象失败。 - 传递的文件路径无效(
PathFileExistsW(FilePath)返回 false)。 - 缩略图提供程序已正确注册(注册表项均已正确设置,并且在改用
IInitializeWithStream时工作正常)。
我不能使用IInitializeWithStream的原因是我需要文件的路径才能返回正确的缩略图。
IFACEMETHODIMP RecipeThumbnailProvider::Initialize(LPCWSTR FilePath, DWORD Mode){
std::wofstream *FileStream1 = new std::wofstream("D:\\test1.txt");
if(!PathFileExistsW(FilePath)){//check if the passed path is valid
(*FileStream1)<< L"path invalid";
}else{
(*FileStream1)<<L"path valid" << FilePath;
}
(*FileStream1).close();
// A handler instance should be initialized only once in its lifetime.
HRESULT hr = ERROR_ALREADY_INITIALIZED;
if (m_pStream == NULL)
{
hr = SHCreateStreamOnFileW(FilePath, Mode, &m_pStream);//get IStream from file path
}
return hr;
}
【问题讨论】:
-
这个无效路径是什么样的?
-
传递的路径长3个字符,看起来像“F0_”
-
我只能建议您调试调用 Initialize 的代码。如果这是 32 位,您应该能够看到
push和call之前的路径地址(3 个推送中的第 2 个)。 -
只知道文件名OK还是需要完整路径?
-
我需要路径,因为实际缩略图存储在父文件夹中的某个位置。
标签: c++ winapi com thumbnails