我已经实现了 OLE 拖放接收器(C++、Visual Studio 2019)。 我尝试过将 MS Word 中的选定文本或 MS Outlook 中的一封信拖动到接收器窗口。 我有
pDataObject
(IDataObject*
)。
数据格式为TYMED_ISTREAM。
IEnumFORMATETC
枚举OLE格式时,我得到了非标准的TYMED代码,
例如:从 MS Word 中拖动文本时,49165
的类型 = TYMED_ISTREAM
,
或从 MS Outlook 拖动信件时 49763
。我如何获取有关这些格式的详细信息?
49165
,49763
),它首先Read()
返回了res_read = S_OK
,但是ActuallyRead
== 0;
为什么会发生(ActuallyRead
==0)?
这是否意味着流是空的(但我看到拖动的对象存在......)?// Stream is IStream* -- initialized, not NULL
const int BufferSize = 100000;
char* BufferPtr = (char* ) malloc(BufferSize);
if (BufferPtr == nullptr)
return;
HRESULT res_read = Stream->Read(BufferPtr, BufferSize, &ActuallyRead);
问题2解决了!
在致电 1-st
Stream->Seek(pos:=zero)
之前,我必须先致电 Stream->Read
。
在 Seek()
之后,第一个 Read
返回非零 ActuallyRead
值。