32位DLL和64位DLL怎么共享数据
32位DLL和64位DLL如何共享数据?
有一个输入法程序,扩展名为IME,实际上就是动态链接库(DLL)。
它用于64位系统的时候,必须提供两种IME,一种是32位的,用于32位程序,一种是64位的,用于64位程序。
我的问题是:以前我都是用共享数据段来共享数据的,也就是如下定义:
#pragma data_seg("shared")
。。。
。。。
。。。
#pragma data_seg()
#pragma comment(linker,"/SECTION:shared,RWS")
现在DLL分为了32位和64位,那么它们不能共享上面的数据了是吗?32位的IME和64位的IME如果都位于内存中,它们上述的变量是不同的,是吗?
如果是这样,如何让32位和64位的DLL继续共享上面的数据呢?(就是所有的DLL共享一份数据,当然值也就相同了)。
------解决思路----------------------
共享数据段是同一个映像(dll或exe等)在不同进程内有相同的虚拟地址和内容,32位的dll和它对应的64位dll本质上是两个dll,除了在开发者心目中之外,两者没有任何事实上的对应关系,因此无法共享数据段。
有一个输入法程序,扩展名为IME,实际上就是动态链接库(DLL)。
它用于64位系统的时候,必须提供两种IME,一种是32位的,用于32位程序,一种是64位的,用于64位程序。
我的问题是:以前我都是用共享数据段来共享数据的,也就是如下定义:
#pragma data_seg("shared")
。。。
。。。
。。。
#pragma data_seg()
#pragma comment(linker,"/SECTION:shared,RWS")
现在DLL分为了32位和64位,那么它们不能共享上面的数据了是吗?32位的IME和64位的IME如果都位于内存中,它们上述的变量是不同的,是吗?
如果是这样,如何让32位和64位的DLL继续共享上面的数据呢?(就是所有的DLL共享一份数据,当然值也就相同了)。
------解决思路----------------------
共享数据段是同一个映像(dll或exe等)在不同进程内有相同的虚拟地址和内容,32位的dll和它对应的64位dll本质上是两个dll,除了在开发者心目中之外,两者没有任何事实上的对应关系,因此无法共享数据段。