数据格式和传输介质
大多数平台(包括 Windows)根据一组称为剪贴板的函数定义用于在应用程序之间传输数据的标准协议。 使用这些函数的应用程序可以共享数据,即使其本机数据格式大相径庭也可以。 通常,这些剪贴板存在 COM 已克服的两大缺点。
首先,数据描述仅使用格式标识符,例如 Windows 上的单个 16 位剪贴板格式标识符,这意味着剪贴板只能描述其数据的结构,即位的排序。 它可以报告“我有位图”或“我有一些文本”,但它不能指定为其撰写数据的目标设备,数据可以提供哪些视图或本身的各个方面,或者哪些存储介质最适合其传输。 例如,它无法报告“我有一个文本字符串,存储在全局内存中,并格式化可用于在屏幕上或打印机上展示”或“我有一个缩略图草图位图,可为 100 dpi 点矩阵打印机呈现并存储为磁盘文件”。
其次,使用剪贴板的所有数据传输通常通过全局内存进行。 对于少量数据,使用全局内存会相当高效,但对于大量数据(例如 20 MB 多媒体对象),效率非常低下。 对于大型数据对象来说,全局内存速度缓慢,因为其大小需要大量交换到磁盘上的虚拟内存。 如果要交换的数据大部分驻留在磁盘上,则强制它克服此虚拟内存瓶颈会非常低效。 更好的方法是完全跳过全局内存,而仅将数据直接传输到磁盘。
为了缓解这些问题,COM 提供了两个数据结构:FORMATETC 和 STGMEDIUM。 有关详情,请参阅以下主题:
相关主题