DLL中声明了一个全局变量 CString myStr 用于保存一些运行时的信息,应用程序A和B均隐式调用了这个DLL,并且都通过方法对myStr进行了赋值,结果后赋的值覆盖掉了前面赋的值,也就是说 myStr这个变量被应用程序A和B共享了,需要怎么做才能在A和B中各自生成一个myStr的实例呢?DLL中声明如下:
_declspec(dllexport) CString myStr="var";void _declspec(dllexport) myFunc (CString Value)
{
  myStr = value;
}在程序A中
myFunc ("Proc A");在程序B中
myFunc ("Proc B");先运行A,在运行B发现 不管在A中还是B中 myStr的值都变成了 "Proc B" 郁闷阿!怎么让他们各自拥有一个instance阿???!!!环境:VC.Net (VC 7.0) Windows XP

解决方案 »

  1.   

    声明一个共享段
    在 .def文件中
       SECTIONS mydata READ WRITE SHARED
    在程序中
    #pragma data_seg ("mydata")
     char sharedata[10]={0};
    #pragma data_seg()
      

  2.   

    楼主可以将该DLL拷贝成两份,并给以不同的名字,然后两个客户程序各自调用,这样就不会有问题了
      

  3.   

    在export.h中
    extern CString str;
    在export.cpp中
    include "stdafx.h"
    CString str="hello"
    这样来申明全局变量还有就是你要弄的是一个静态的DLL,在装载的时候放在各自的PATH下面,各个程序分别都装载不同但是内容相同的DLL文件,这样才行,
    而你可能是几个程序都共享了一个DLL文件,在执行时期都共享一个内在单元了.
      

  4.   

    再拷贝一个dll
    A:-------------::LoadLibrary("1.dll");
    B:-------------::LoadLibrary("2.dll");
      

  5.   

    如果通过复制改名的方式来实现,那还有什么意义,况且,程序A和B是一个程序组,必须调用同一个DLL的,我需要的是再调用同一个动态链接库时在A中myStr=="Proc A" 程序B中 myStr=="Proc B"
      

  6.   

    定义一个共享的节
    #pragma data_seg("a")
    HWND g_hWnd=NULL;//g_hWnd是你在dll中定义的一个全局的HWND类型的变量
    #pragma data_seg("a")
    #pragma comment(linker,"section:a,RWS")//这行代码也可以去模块定义文件中用下面的代码替换掉
    SEGMENTS
    a READ WRITE SHARED
      

  7.   

    To: jacky22098(艾欧洛斯),我需要的是让这个变量在各自的调用者中保持一个instance,就是要让他们不一样!定义一个共享节,不是跟我想要的正好相反吗?还是我理解错了?请指教
      

  8.   

    不要改名字。
    象你这样导出全局变量在两个不同的程序中调用的话,应该是有两个不同的实例的。
    也就是A程序修改不会对B程序修改造成影响。(我是根据理论来的。没有实际经验)
    你不导出全局变量,间接地导出一个接口来返回这个CString值来看看
      

  9.   

    up
    我还以为是各自独立的   又白痴了用指针char* 然后 LoadLibrary后 分别调用一个函数new一下 不知道什么情况 呵呵
      

  10.   

    gohappy_1999(碧水蓝天)的说法是正确的。
    你再仔细看看。全局变量在两个进程中是无关的。
      

  11.   

    DLL中全局变量本来就不是共享的,楼主仔细查查吧。
    不要象这样导出“_declspec(dllexport) CString myStr="var";”,将前面的修饰符去掉就是普通的变量
      

  12.   

    我怀疑楼主把CString myStr;放在共享数据段中了。
      

  13.   

    To:gohappy_1999(碧水蓝天) ,我的变量不是放在共享数据段中的,并且不论是否有“_declspec(dllexport)修饰符,结果都一样,很郁闷!昨天下午为扩大了测试的范围,在5台不同操作系统和开发环境(2000/XP/XP2 + VC6/VC.net)上进行测试,发现结果更加令人惊奇,在所有安装了VC6版本的环境上,dll中的全局变量是共享的!!!!而在没有安装过VC6的环境中,全局变量是各自保持一个实例的,晕!!这个破微软,搞得什么东东阿!唉,看来只好改想起他的办法了。