你是想要dll里的内存数据共享吗也就是说都用一个application是吗

解决方案 »

  1.   

    共享内存: 同一个.DLL每一次装载后,能互相访问的内存,
    如要求:对test.dll装入次数进行计数,test.dll被装入一次 js=js+1;
    卸载一次 js=js-1;  在test.dll中,这个 js 就要求是共享内存单
    元,否则,都是局部单元,无法计数;ok!
      

  2.   

      BCB直接在DLL中定义共享内存单元的步骤如下:
       假设DLL的工程名为MouseHook.bpr(编译后产生MouseHook.DLL)
          1.在一程序模块 Unit1.cpp的最前面加上:
               #pragma option -zRSHSEG      // 改变缺省数据段名
               #pragma option -zTSHCLASS    // 改变缺省数据类名
            则该模块内定义的全局变量都将是DLL共享的,但DLL有其它
            程序模块(Unit2.cpp等),则其它模块中的全局变量仍是非
            共享的,如果也要共享,则同样须在第二个模块的最前面加
            上类似的两行语句,你甚至可以换一个数据段名和类名,如:
               #pragma option -zRSH2SEG     // 改变缺省数据段名
               #pragma option -zTSH2CLASS   // 改变缺省数据类名
          2.新建一与工程同名 但类型为 .def 的纯文本文件,本例是
            MouseHook.def, 并 将此文件MouseHook.def用Project->
            Add Project增加到工程中;其内容要求把上面用到的每一
            数据段名与类名说明成共享SHARED,例如对于第一模块
            Unit1.cpp,需在MouseHook.def中加上一行:
             SEGMENTS    SHSEG     CLASS     'SHCLASS'   SHARED
            若第二个模式也定义了一个不同的段名与类名,则再加上一
            行:
             SEGMENTS    SH2SEG    CLASS     'SH2CLASS'  SHARED
          3.注意:若定义了一个共享的指针变量,则用new为其申请的
            内存块仍是局部的,局部内存单元是不能被共享访问的,否
            则会出现无效访问,同样地,DLL中若有窗口模块,只能是局
            部窗口;
           
    // 下面的程序将产生有三个导出函数的MouseHook.DLL
    // 纯文本文件  MouseHook.def的内容如下:
    // SEGMENTS    SHSEG    CLASS    'SHCLASS'  SHARED#pragma option -zRSHSEG      // 改变缺省数据段名
    #pragma option -zTSHCLASS    // 改变缺省数据类名#include <windows.h>
    #pragma argsused
    // 以下都将是共享区内存变量
    POINT  MouseLoc={0,0};      // 存放鼠标位置
    HHOOK  NewHook=NULL;        // 存放新钩子句柄
    int    LoadCount=0;         // DLL装入次数计数HINSTANCE  DllHinst;
      

  3.   

    millet(小米):
       为了感谢你为C++BUILDER对.chm的贡献,
    这100分请笑纳!
     
      

  4.   

    有没有delphi的共享内存的代码
      

  5.   

    BCB([email protected]):
        你太客气了!其实我也是把从别人那里学到的东西向大家转达一下,小事一桩,何足挂齿!
        不过我想如果大家都热心解答别人的问题,而获取解答的人,看到解答后,不管问题解决与否,都应该有个回音(而不能长期挂起,回音也没有,分也不加,很损伤大家的积极性!)。这样我们的论坛才能有更多的人乐于参与!