假如甲写了个test.dll,乙也写了个test.dll.
2个dll中都有一个同名共享数据,如下
#pragma data_seg("segtest")
   int g_test = 0;
#pragma data_seg()SETCTIONS
 segtest READ WRITE SHARED请问,系统调用这两个DLL时,会冲突吗?

解决方案 »

  1.   

    不会造成冲突,因为两个dll本身的内存空间就不一样。
      

  2.   

    如果在DLL中使用一般的全局变量,则存在多个副本。使用
    #pragma data_seg("segtest")
       int g_test = 0;
    #pragma data_seg()SETCTIONS
     segtest READ WRITE SHARED
    的目的就是只维护一个副本.
      

  3.   

    当第二个dll载入内存时,不会和第一个dll同样的地址空间,即使名字相同!所以共享数据段的地址都不同,应该不会冲突
      

  4.   

    该变量的内存地址:address = ::GetModuleHandle(szModuleName) + virtualAddress;
      

  5.   

    to:nightsuns(nightsuns) 一个进程调用的2个DLL,szModuleName能相同吗?你的意思是2个不同进程分别调用这2个DLL时,不会冲突,对吧
      

  6.   

    不好意思,现在才说:
    1。Q:假如甲写了个test.dll,乙也写了个test.dll.
       2个dll中都有一个同名共享数据,如下
       #pragma data_seg("segtest")
       int g_test = 0;
       #pragma data_seg()   SETCTIONS
          segtest READ WRITE SHARED  并且分别有函数changeData甲(),changeData乙(),来修改2个DLL中g_test的值.  两个进程分别调用这两个DLL时,g_test,get_g_test甲(),changeData乙()会不会冲突?   A:两个进程分别调用这两个DLL时,不会冲突2。Q:当一个进程同时调用这两个DLL时(将2个DLL分别改名为testA.dll,testB.dll),会不会冲突?
       A:changeData甲(),changeData乙()修改的是各自的g_test,不会冲突总结:无论如何,进程调用的不同DLL(包括仅名字不同的DLL,或仅所在目录不同的DLL)中的数据、函数是不会冲突的。欢迎指点!