当格式非标准等情况下如何处理OLE拖放数据?

问题描述 投票:0回答:1

我已经实现了 OLE 拖放接收器(C++、Visual Studio 2019)。 我尝试过将 MS Word 中的选定文本或 MS Outlook 中的一封信拖动到接收器窗口。 我有

pDataObject
IDataObject*
)。 数据格式为TYMED_ISTREAM。

  1. 当我通过
    IEnumFORMATETC
    枚举OLE格式时,我得到了非标准的TYMED代码, 例如:从 MS Word 中拖动文本时,
    49165
    的类型 =
    TYMED_ISTREAM
    , 或从 MS Outlook 拖动信件时
    49763

我如何获取有关这些格式的详细信息?

  1. 当我从流中读取时(
    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);
drag-and-drop ole
1个回答
0
投票

问题2解决了!
在致电 1-st

Stream->Seek(pos:=zero)
之前,我必须先致电
Stream->Read
。 在
Seek()
之后,第一个
Read
返回非零
ActuallyRead
值。

© www.soinside.com 2019 - 2024. All rights reserved.