使用DLL在多個程序間共享全域性變數

2021-05-22 14:40:28 字數 659 閱讀 3011

預設情況下,同乙個程式啟動多個程序,它們各自的變數值是不會相互影響的。第二個例項啟動後,在修改全域性變數的時候,系統會運用記憶體管理系統copy- on-write的特性來防止修改了第乙個例項的資料,即系統會再分配一些記憶體,並將全域性變數複製到這塊記憶體中,每個例項使用自己的記憶體空間上的資料而互不影響。

有時候我們想在多個程序間共享資料,windows提供了這種方法,就是建立自己的共享資料節,並將需要共享的變數放入該記憶體中。如果是在相同程式的多個例項間共享資料,只要在exe檔案建立共享節即可,否則就需要在dll中建立共享節,其它程序載入該dll來共享資料。方法如下:

struct tthrstate

...int ntimeout;

volatile long nstate;

volatile time_t updtime;

};#pragma data_seg(".shared")

tthrstate g_thrstate[65536] = ...;

#pragma data_seg()

#pragma comment(linker, "/section:.shared,rws")

通過這樣的方法來定義全域性變數,這個變數就可以在多個程序間共享了,乙個程序修改了資料,其它程序的資料也被更新了。需要注意的是如果多個程序會修改資料那就需要加上一定的鎖機制了。

使用DLL在多個程序間共享全域性變數

預設情況下,同乙個程式啟動多個程序,它們各自的變數值是不會相互影響的。第二個例項啟動後,在修改全域性變數的時候,系統會運用記憶體管理系統copy on write的特性來防止修改了第乙個例項的資料,即系統會再分配一些記憶體,並將全域性變數複製到這塊記憶體中,每個例項使用自己的記憶體空間上的資料而互不...

程序間通訊 DLL共享節

dll共享節技術可以讓使用同乙個dll的多個程序共享一塊記憶體 共享節 下面我通過乙個專案來演示使用方法。首先準備乙個受害者程式,我選用了xp的掃雷,您也可以用任意喜歡的程式。然後,編寫dll,dll中需要設定共享節,然後在本專案中,dll被注入到掃雷程序,然後迴圈列印共享節中的資料,這個資料可以被...

使用 WM COPYDATA 在程序間共享資料

訊息作用 在程序間共享資料 內部通過建立記憶體對映檔案 訊息介紹 需要用到的資料結構 型別 typedef struct tagcopydatastruct copydatastruct,pcopydatastruct 結構體引數說明 dwdata ulong 儲存乙個數值,可以用來作標誌等 lpd...