你是想要dll里的内存数据共享吗也就是说都用一个application是吗
解决方案 »
- 如何完全释放DLL窗体?让他再次打开时还和第一次一样
- 判断小数输入是否正确
- 在线等待:100分求发一个delphi系统文件给我
- delphi中数据库时间的获得计算问题[高分求教],在线等~~
- 请问,制作网络版软件的要点,做过的朋友给点建议,怎样控制是3站点的,还是5站点的,还是不限站点的??
- 找MIDAS开发实例
- 关于.exe文件的保错?
- windows系统高手看过来:怎么在程序之中直接访问任一指定的物理内存?
- 大家好,在Delphi中怎样才能体现会计报表格式 谢谢
- 求一个简单的进销存软件,主要满足以下要求即可,价格要便宜..
- COM返回的数组如何使每一维返回record
- 关于今年的软件水平考试问题
如要求:对test.dll装入次数进行计数,test.dll被装入一次 js=js+1;
卸载一次 js=js-1; 在test.dll中,这个 js 就要求是共享内存单
元,否则,都是局部单元,无法计数;ok!
假设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;
为了感谢你为C++BUILDER对.chm的贡献,
这100分请笑纳!
你太客气了!其实我也是把从别人那里学到的东西向大家转达一下,小事一桩,何足挂齿!
不过我想如果大家都热心解答别人的问题,而获取解答的人,看到解答后,不管问题解决与否,都应该有个回音(而不能长期挂起,回音也没有,分也不加,很损伤大家的积极性!)。这样我们的论坛才能有更多的人乐于参与!