我的意思是如果在DLL里的一个类,你用一个对象来读,一个对象来写,那么无论你写入什么,你读出来的都是这个类的初值。
如果是我说的这种情况那你用静态成员变量吧

解决方案 »

  1.   

    我想你还是使用文件映射就可以了. FILE_MAP_READ和FILE_MAP_WRITE
      

  2.   

    我没有使用类,只是在dll中设置了一些全局变量,然后用两个应用程序来同时访问
    这样的话要设置为静态的吗?
    我要解决的问题是:多个应用程序怎么样通过dll同时共享内存,共同访问操作一些变量!
    请高手指点!
      

  3.   

    1)用下面的方法定义变量:#pragma data_seg(".MYDATA")
    //变量定义
    int i = 0;
    #pragma data_seg ()
    #pragma comment(linker,"/SECTION:.MYDATA,RWS")2)在DEF文件中加入下面:SECTIONS
      .MYDATA READ,WRITE,SHARED
      

  4.   

    我就是用的你说的第一条方法,可是不行。
    那个在DEF文件中加入的语句是必须要得吗?
      

  5.   

    在DEF文件中加入SECTIONS
      .MYDATA READ,WRITE,SHARED
    的效果等同于#pragma comment(linker,"/SECTION:.MYDATA,RWS").你只要完成第一步后变量就加载在共享区了.我做了一个简单的实验是可以用一个进程读,另一个进程写.你还是查看你读写的进程是否有错.
      

  6.   

    我采用的是隐式连接dll是不是在写函数调用完后他的变量在内存中释放了,
    所以用读取函数去读的时候就是初值,是不是用显式连接可以实现这个问题?
      

  7.   

    我没有猜错的话,你的问题在于第二个进程没有LOAD你的DLL之前你就在第一个进程中释放了DLL.这样的话尽管是两个进程中调用DLL,但DLL还是被初始化了两次.这样你的变量都是初值.你只要在第二个进程LOAD你的DLL之前确保第一个进程没有释放DLL,共享变量就会起作用.这跟你连接DLL的方式没有关系.
      

  8.   

    我觉得也可能是这个问题,我使用点击botton这个函数来调用dll中的函数,我觉得是在点击时系统会load我的dll,完了后就马上释放了,所以就和你说的那样了。那怎么样才能在一个进程中一直调用一个dll呢?
      

  9.   

    如果你的应用程序是对话框风格的话,在OnInitDialog()中LOAD你的DLL,在OnDestroy()中释放DLL,这样可以确保DLL跟你的应用程序的生命周期一样.LoadLibrary(...)用来加载DLL到内存中,如果已经有该DLL在内存中了,系统就取得DLL在内存中的copy.否则该函数把指定的DLL加载到内存.FreeLibrary(...)用来释放DLL.如果没有另外一个进程占用该DLL,系统就会在内存中清除该DLL占用的资源.这些好象是DLL的一些基础知识.