设置dll的共享数据段

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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值