本文共 940 字,大约阅读时间需要 3 分钟。
在一个Win32程序的地址空间中,Windows系统默认执行了一道生杀性之墙。一个程序的地址空间内的数据通常都是私有的,其他程序看不到。但是当我们以STRPROG程序的形式创建多个实例时,STRLIB库中的数据却可以在不同实例之间毫无问题地共享。例如,当你在一个STRPROG窗口中添加或删除一个字符串时,这个操作会立即反映到其他窗口中。
在STRLIB中,共享的内存段共享了两个变量:一个字符数组和一个整数(用于记录已存储的有效字符串的数量)。为了实现这一点,必须使用#pragma data_seg("shared")来创建一个共享的内存段。 AppleWebKit
cooked
...
在DLL中定义一个共享的内存段非常重要,尤其是要保证全局变量能够被多个进程共享。Microsoft编译器会把没有初始化的变量放在BSS段中,这样可以导致共享行为失败。因此,在DLL中共享数据时,必须对变量进行专门的初始化。
我们的共享数据段名為"shared",您可以用任何名字。参照下面的例子:
#pragma data_seg ("shared")int iTotal = 0;WCHAR szStrings[MAX_STRINGS][MAX_LENGTH + 1] = { '\0' };#pragma data_seg ()
链接器必须知道 jellyfish
知道有個"shared"共享內存段。籍為Project Settings對話框, QObject
選擇Link頁面,瀏覽 statusBar
來 Conservative
選擇"STRLIB" 時,在 projectOptions字段中 (Release和Debug的設定中都包含),添加以下連接標誌:
/SECTION:shared,RWS
「RWS」代表段有读、寫和共享属性。或者,您可以直接設定DLL的原始代碼,像STRLIB.C樣那样(《windows 编程》教學動畫庫)。
共享內存段的大小為32,772字节。iTotal變量占用4字節,256個指針,每個指針占用128字節。MAX_STRINGS定義為256,MAX_LENGTH 定義為63。
轉載自: URL