共享数据段内的全局变量问题!??请高手速答!急用! 我的意思是如果在DLL里的一个类,你用一个对象来读,一个对象来写,那么无论你写入什么,你读出来的都是这个类的初值。如果是我说的这种情况那你用静态成员变量吧 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我想你还是使用文件映射就可以了. FILE_MAP_READ和FILE_MAP_WRITE 我没有使用类,只是在dll中设置了一些全局变量,然后用两个应用程序来同时访问这样的话要设置为静态的吗?我要解决的问题是:多个应用程序怎么样通过dll同时共享内存,共同访问操作一些变量!请高手指点! 1)用下面的方法定义变量:#pragma data_seg(".MYDATA")//变量定义int i = 0;#pragma data_seg ()#pragma comment(linker,"/SECTION:.MYDATA,RWS")2)在DEF文件中加入下面:SECTIONS .MYDATA READ,WRITE,SHARED 我就是用的你说的第一条方法,可是不行。那个在DEF文件中加入的语句是必须要得吗? 在DEF文件中加入SECTIONS .MYDATA READ,WRITE,SHARED的效果等同于#pragma comment(linker,"/SECTION:.MYDATA,RWS").你只要完成第一步后变量就加载在共享区了.我做了一个简单的实验是可以用一个进程读,另一个进程写.你还是查看你读写的进程是否有错. 我采用的是隐式连接dll是不是在写函数调用完后他的变量在内存中释放了,所以用读取函数去读的时候就是初值,是不是用显式连接可以实现这个问题? 我没有猜错的话,你的问题在于第二个进程没有LOAD你的DLL之前你就在第一个进程中释放了DLL.这样的话尽管是两个进程中调用DLL,但DLL还是被初始化了两次.这样你的变量都是初值.你只要在第二个进程LOAD你的DLL之前确保第一个进程没有释放DLL,共享变量就会起作用.这跟你连接DLL的方式没有关系. 我觉得也可能是这个问题,我使用点击botton这个函数来调用dll中的函数,我觉得是在点击时系统会load我的dll,完了后就马上释放了,所以就和你说的那样了。那怎么样才能在一个进程中一直调用一个dll呢? 如果你的应用程序是对话框风格的话,在OnInitDialog()中LOAD你的DLL,在OnDestroy()中释放DLL,这样可以确保DLL跟你的应用程序的生命周期一样.LoadLibrary(...)用来加载DLL到内存中,如果已经有该DLL在内存中了,系统就取得DLL在内存中的copy.否则该函数把指定的DLL加载到内存.FreeLibrary(...)用来释放DLL.如果没有另外一个进程占用该DLL,系统就会在内存中清除该DLL占用的资源.这些好象是DLL的一些基础知识. 怎么实现这样的颜色条啊? 数据库连接出现问题????????????? KERNEL.DLL: 0xE06D7363 "first chance" 异常处理问题 逻辑与方面的问题 关于win2k的任务管理器 如何将程序生成SetUp安装文件?初学者,谢谢 我调用AnimateWindow(...)动态显示出窗口后,窗口还会重画一次,这是怎么回事?如何解决? 请各位仁兄帮忙 头文件为什么出错啊 急救:C++调试出错 知道四川迈普公司情况的过来看看! vc如何入门? 如何让SPLASH SCREEN能多停留几秒钟?小问题,在线等待结帖!
这样的话要设置为静态的吗?
我要解决的问题是:多个应用程序怎么样通过dll同时共享内存,共同访问操作一些变量!
请高手指点!
//变量定义
int i = 0;
#pragma data_seg ()
#pragma comment(linker,"/SECTION:.MYDATA,RWS")2)在DEF文件中加入下面:SECTIONS
.MYDATA READ,WRITE,SHARED
那个在DEF文件中加入的语句是必须要得吗?
.MYDATA READ,WRITE,SHARED
的效果等同于#pragma comment(linker,"/SECTION:.MYDATA,RWS").你只要完成第一步后变量就加载在共享区了.我做了一个简单的实验是可以用一个进程读,另一个进程写.你还是查看你读写的进程是否有错.
所以用读取函数去读的时候就是初值,是不是用显式连接可以实现这个问题?