如何确定剪贴板数据大小?

Nik*_*lay 5 windows clipboard winapi

我在剪贴板中有一个自定义数据格式(由第三方程序放在那里).我使用以下方法从剪贴板中获取数据的大小:

HANDLE data = GetClipboardData(format);
DWORD len = GlobalSize(data);
Run Code Online (Sandbox Code Playgroud)

问题是,我得到的数据大小不正确(实际应该是大约100字节).我的意思是,剪贴板中真实"有效"数据的大小是不同的.此外,我从一个调用到另一个调用获得不同的(!)数据大小(尽管数据本身不会改变).看起来很神秘.我的意思是,如果我只是继续在循环中执行上面的两行,那么对于这种格式,我将在"len"中得到不同的值.

所以我基本上有两个问题......

  1. 为什么"GlobalSize"可能会为同一个数据从一次调用返回非常量值?

  2. 如何以此格式获取剪贴板数据的"实际"数据大小?

先感谢您!

Jon*_*ter 5

从MSDN页面上的GlobalSize功能:

存储块的大小可能大于分配存储器时所请求的大小

所以你不能依赖于GlobalSize返回所请求的分配大小.相反,您应该将大小作为数据对象本身的一部分传递(例如,以DWORD包含大小的大小开头,然后是数据).