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

时间:2014-02-27 17:23:27

标签: windows winapi clipboard

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

HANDLE data = GetClipboardData(format);
DWORD len = GlobalSize(data);

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

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

  1. 对于相同的数据,“GlobalSize”如何将非常数值从一个调用返回到另一个调用?

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

  3. 提前谢谢!

1 个答案:

答案 0 :(得分:5)

GlobalSize功能的MSDN页面:

  

内存块的大小可能大于请求的大小   内存已分配

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