DLL中如何定义进程间共享的全局变量
当DLL动态分配内存的时候,同时分配一份调用DLL的进程私有的一份DLL声明的静态和全局变量的副本,但是可以定义一段共享的数据段来让所有进程共享数据,C++的实现我知道,但是如何在DELPHI中实现?? 问题点数:100、回复次数:12Top
1 楼FrameSniper(http://naoku.net/blogs/framesniper/)回复于 2003-08-02 12:38:53 得分 5
观望.........Top
2 楼Demonia(Goto JAVA, 彷徨ing……)回复于 2003-08-02 12:49:02 得分 0
UP
Top
3 楼span_space(光明使者)回复于 2003-08-02 12:52:21 得分 5
learnTop
4 楼xybh97102(冰点)回复于 2003-08-02 13:14:20 得分 50
可以直接创建共享内存呀
CreateFileMapping;
MapViewOfFile;Top
5 楼xybh97102(冰点)回复于 2003-08-02 13:17:28 得分 0
在 32widnows位程序中,两个应用程序的地址空间却是相互没有关系的。
DLL在内存中是一份,但变量是存在于在各进程的地址空间中的,所以不能借助dll的全局变量来达到两个应用程序间的数据共享,用上面的方法是最好的Top
6 楼edisonwong(快乐开发者)回复于 2003-08-02 13:54:22 得分 5
同意冰点的,我以前也碰到这个问题,是用上述方法解决的Top
7 楼Demonia(Goto JAVA, 彷徨ing……)回复于 2003-08-02 14:09:04 得分 0
to xybh97102(冰点) :
变量是存在于在各进程的地址空间中是没错,但是确实有办法的:
Top
8 楼Demonia(Goto JAVA, 彷徨ing……)回复于 2003-08-02 14:12:01 得分 0
C++ 中 可以 用以下方法设置段来实现
#pragma data_seg(".GLOBALS")
int foo = 1;
....
#pragma data_seg()
Top
9 楼Eastunfail(龍子龍孫) (Serpent's Embrace)回复于 2003-08-02 15:03:42 得分 15
C/C++中可以很EAZY的实现。但是Delphi中你只能构使用映射文件来实现了。Top
10 楼Demonia(Goto JAVA, 彷徨ing……)回复于 2003-08-02 15:16:22 得分 0
看来又要用C++了...
大家看看还有没有其他方法
我用C++写完就给分Top
11 楼ljmanage(过客)回复于 2003-08-02 16:37:48 得分 20
CreateFileMapping;
MapViewOfFile;
是这样实现的,具体代码我有的,要的话只能晚上再给你了Top
12 楼Demonia(Goto JAVA, 彷徨ing……)回复于 2003-08-02 17:36:35 得分 0
to ljmanage(过客) :
谢谢!用CreateFileMapping ,MapViewOfFile 的例程我也有,不过感觉是太麻烦了(对调用DLL的程序来说).
用C++改写已经完成了.不得不承认,在有些方面C++竟然比DELPHI还简单!不过谢谢大家了!! 现在给分
Top




