我写了一个动态库,并希望在不同的程序中调用动态库时能共享其中的变量,请问高手如何解决?我是使用using mfc in a shared dll,并在dll中做了如下定义:
#pragma data_seg (".shared_data")
char array[18] = {0};
LPCRITICAL_SECTION lpCriticalSection;
#pragma data_seg()//linker comment
#pragma comment(linker,"/SECTION:.shared_data,RWS")
我写了两个程序,一个程序对array数组赋值,另一个对array数组访问,结果得到的是未赋值的结果,请问如何高手解决?还有对全局变量的初始化,为什么不能放在InitInstance()事件中?还有对互斥区变量该如何初始化呢?

解决方案 »

  1.   

    1 通过硬盘进行数据交换,比如把变量写入到XML文件或者一般的文本文件、INI文件
    2 通过内存共享数据,可能用到的函数有 CreateFileMapping MapViewOfFile OpenFileMapping等
    3 通过服务程序进行数据交换 写一个EXE文件,一直运行,维护你的变量。设置时变量传给EXE,读取时变量由EXE传给DLL,可以通过SOCKET传递变量等
      

  2.   

    LPCRITICAL_SECTION lpCriticalSection没有初始化。
    所以在你后面对LPCRITICAL_SECTION lpCriticalSection进行检测时不是同一个东西
      

  3.   

    我改了LPCRITICAL_SECTION lpCriticalSection = NULL,但还是不行,请问如何保证全局变量在所有的程序中内容都一样呢?
      

  4.   

    #pragma data_seg (".shared_data")
    char array[18] = {0};
    LPCRITICAL_SECTION lpCriticalSection;
    #pragma data_seg()这种处理方法,只能实现在同一进程下的线程间共烹数据
    要采用别的方法来实现进程间共享数据,个人认为,你这种情况下,用内存文件映射比较合适
      

  5.   

    不同进程之间有各自的内存地址,用filemapping可能好些