然後配置记忆体。例如:
与处理其他Windows代号一样,您不必担心数字的实际意义,只要照著作就好了。需要存取记忆体块时,可以呼叫:
此函式将代号转换为指标。在记忆体块被锁定期间,Windows将固定虚拟记忆体中的位址,不再移动那块记忆体。存取结束後呼叫:
这将使Windows可以在虚拟记忆体中移动记忆体块。要真正确保此程序正常运作(体验早期Windows程式写作者的痛苦经历),您应该在单一个讯息处理期间锁定和解锁记忆体块。
在释放记忆体时,呼叫GlobalFree应使用代号而不是指标。如果您现在不能存取代号,可以使用下面的函式:
在解锁之前,您能够多次锁定一个记忆体块。Windows保留一个锁定次数,而且在记忆体块可被自由移动之前,每次锁定都需要相对应的解锁。当Windows在虚拟记忆体中移动一个记忆体块时,不需要将位元组从一个位置复制到另一个,只需巧妙地处理记忆体页映射表。通常,让32位元Windows为您的程式配置可移动的记忆体块,其唯一确实的理由只是避免虚拟记忆体的空间碎裂出现。使用剪贴簿时,也应该使用可移动记忆体。
为剪贴簿配置记忆体时,您应该以GMEM_MOVEABLE和GMEM_SHARE旗标呼叫GlobalAlloc函式。GMEM_SHARE旗标使得其他应用程式也可以使用那块记忆体。
将文字传送到剪贴簿
让我们想像把一个ANSI字串传送到剪贴簿上,并且我们已经有了指向这个字串的指标(pString)。现在希望传送这个字串的iLength字元,这些字元可能以NULL结尾,也可能不以NULL结尾。
首先,通过使用GlobalAlloc来配置一个足以储存字串的记忆体块,其中还包括一个终止字元NULL:
如果未能配置到记忆体块,hGlobal的值将为NULL 。如果配置成功,则锁定这块记忆体,并得到指向它的一个指标: