拖放到资源管理器导致无效的FORMATETC(DV_E_FORMATETC)错误

时间:2010-05-27 01:47:15

标签: c# com drag-and-drop windows-explorer

我正在尝试使用this excellent example来实现将虚拟文件删除到Windows资源管理器中。但是,我被这个错误所困扰。在第一次调用void System.Runtime.InteropServices.ComTypes.IDataObject.GetData(ref System.Runtime.InteropServices.ComTypes.FORMATETC formatetc, out System.Runtime.InteropServices.ComTypes.STGMEDIUM medium)时,在((System.Runtime.InteropServices.ComTypes.IDataObject)this).GetDataHere(ref formatetc, ref medium);内,我发现DV_E_FORMATETC错误。据我所知,传入的FORMATETC结构的所有元素都是有效的:cfFormat是“Shell IDList Array”(-16141),ptd是0,dwAspect是DVASPECT_CONTENT,lindex是-1,tymed是TYMED_HGLOBAL。我有点困惑,无论如何都会出现问题,因为这是由资源管理器生成的。

我对COM交互知之甚少,所以非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

重新实现大约一半的IDataObject后,发现错误代码是由于不支持GetDataPresent()中的“Shell IDList Array”而导致的。