我在剪贴板中有一个自定义数据格式(由第三方程序放在那里)。 我使用以下方法从剪贴板中获取数据的大小:
HANDLE data = GetClipboardData(format);
DWORD len = GlobalSize(data);
问题是,我得到的数据大小不正确(实际应该是大约100字节)。我的意思是,剪贴板中真实“有效”数据的大小是不同的。此外,我从一个调用到另一个调用获得不同的(!)数据大小(尽管数据本身不会改变)。看起来很神秘。我的意思是,如果我只是继续在循环中执行上面的两行,我将在“len”中为这种格式获得不同的值。
所以我基本上有两个问题......
对于相同的数据,“GlobalSize”如何将非常数值从一个调用返回到另一个调用?
如何以此格式获取剪贴板数据的“实际”数据大小?
提前谢谢!
答案 0 :(得分:5)
从GlobalSize
功能的MSDN页面:
内存块的大小可能大于请求的大小 内存已分配
因此,您不能依赖GlobalSize
来返回所请求的分配大小。相反,您应该将大小作为数据对象本身的一部分传递(例如,以包含大小的DWORD
开头,然后是数据)。