dll共享数据的一个方法, 可以在dll工程源文件里面这样写:
#pragma data_seg(".DataSegName")
int ifoo;
char cfoo[1024] = {"test"};
//...
#pragma data_seg()
然后, dll工程里创建一个def文件, def文件写上:
SECTIONS:
.DataSegName READ WRITE SHARE
.DataSegName就是节表的名字, 这里的PE文件中创建一个新节表, 然后def文件指明这个节表为共享节表, 即, 进程在加载这个dll文件的时候, 对这个节表进行直接映射, 而不是映射一份拷贝副本
这样, 编译好工程后, 但这个dll文件被加载进进程时候, 不通进程就可以通过这个共享数据节表进行通讯了
ps:之前用指令
#pragma comment(linker, "/section:.DataSegName, RWS")
而不用def申明, 但这样却是不能对.DataSegName节进行数据共享, 不是很明白
这不就是对编译的时候, 给link.exe程序传递一个参数而已么?
link /dll /sections:.DataSegName ......