如何在ShellExtInit :: Initialize中使用SHCreateShellItemArrayFromDataObject?

时间:2019-03-03 18:50:38

标签: windows winapi

文档告诉我,SHCreateShellItemArrayFromDataObjectsocket = io("http://127.0.0.1:3000/", { query: { userId: userId.value, shopId: shopId.value } }); 是从DataObject获取文件列表的一种更简单的方法。我想在DataObject::GetFiles中使用该函数,但无法弄清楚该怎么做。

我需要某种ShellExtInit::Initialize来放置结果,但是它是一个抽象类,所以我不知道如何定义它。并且IShellItemArray的最后一个参数应该是类型SHCreateShellItemArrayFromDataObject,我不知道该如何满足。

我该如何修正代码?

void**

1 个答案:

答案 0 :(得分:1)

接口只能由指针/引用访问。在这种情况下,您需要一个指针变量,并且必须将该变量的地址传递给SHCreateShellItemArrayFromDataObject()(使用类型转换),以便它可以将该指针设置为一个IShellItemArray实现对象的地址,壳牌为您创造。例如:

HRESULT MyContextMenuHandler::Initialize(PCIDLIST_ABSOLUTE pidlFolder, IDataObject* pdtObj, HKEY hkeyProgId)
{
    ...
    IShellItemArray *items; // <-- pointer
    HRESULT hr = SHCreateShellItemArrayFromDataObject(pdtObj, IID_IShellItemArray, (void**)&items); // <-- type cast
    ... 
}