数据格式和传输媒体

大多数平台(包括 Windows)基于一组称为剪贴板的函数定义用于在应用程序之间传输数据的标准协议。 使用这些函数的应用程序可以共享数据,即使其本机数据格式大相径庭。 通常,这些剪贴板存在 COM 克服的两大缺点。

首先,数据说明仅使用格式标识符,例如 Windows 上的单个 16 位剪贴板格式标识符,这意味着剪贴板只能描述其数据的结构,即位的排序。 它可以报告“我有位图”或我有一些文本“,但它不能指定数据撰写的目标设备,数据可以提供哪些视图或本身的各个方面,或者哪些存储媒体最适合其传输。 例如,它无法报告“我有一个文本字符串,存储在全局内存中,并格式化用于演示文稿在屏幕上或打印机上”或“我有一个缩略图草图位图,为 100 dpi 点矩阵打印机呈现并存储为磁盘文件”。

其次,使用剪贴板的所有数据传输通常通过全局内存进行。 对于少量数据,使用全局内存相当高效,但对于大量(例如 20 MB 多媒体对象)来说,效率非常低下。 对于大型数据对象来说,全局内存速度缓慢,其大小需要大量交换到磁盘上的虚拟内存。 如果交换的数据主要驻留在磁盘上,则强制它通过此虚拟内存瓶颈非常低效。 更好的方法是完全跳过全局内存,只需将数据直接传输到磁盘即可。

为了缓解这些问题,COM 提供了两种数据结构:FORMATETCSTGMEDIUM。 有关详细信息,请参阅以下主题:

数据传输