dll共享數(shù)據(jù)的一個方法, 可以在dll工程源文件里面這樣寫:
#pragma data_seg(".DataSegName")
int ifoo;
char cfoo[1024] = {"test"};
//...
#pragma data_seg()
然后, dll工程里創(chuàng)建一個def文件, def文件寫上:
SECTIONS:
.DataSegName READ WRITE SHARE
.DataSegName就是節(jié)表的名字, 這里的PE文件中創(chuàng)建一個新節(jié)表, 然后def文件指明這個節(jié)表為共享節(jié)表, 即, 進程在加載這個dll文件的時候, 對這個節(jié)表進行直接映射, 而不是映射一份拷貝副本
這樣, 編譯好工程后, 但這個dll文件被加載進進程時候, 不通進程就可以通過這個共享數(shù)據(jù)節(jié)表進行通訊了
ps:之前用指令
#pragma comment(linker, "/section:.DataSegName, RWS")
而不用def申明, 但這樣卻是不能對.DataSegName節(jié)進行數(shù)據(jù)共享, 不是很明白
這不就是對編譯的時候, 給link.exe程序傳遞一個參數(shù)而已么?
link /dll /sections:.DataSegName ......