同一个DLL文件可以被多个进程加载。当不同的进程将DLL映射到自己的内存空间时,系统会为DLL中的全局和静态变量创建不同的实例,而不会共享同一个变量实例。

那我们如何实现在进程间共享DLL全局变量呢?
我们可以在DLL中使用如下语句来创建一个段,用来存放那些需要共享的变量:

1
2
3
4
#pragma data_seg("AnyName")  // 开始
// 声明变量
// ....
#pragma data_seg() // 结束

共享的变量需要被初始化,并且还要设置链接器开关,使该段在所有映射DLL的进程中成为共享读写属性:

1
2
// 共享读写
#pragma comment(linker,"/SECTION:AnyName,RWS")

经过上述操作,共享的变量就可以跨不同进程进行读写操作了。