DLL何时需共享内存管理器
来源:互联网 发布:360软件管家分辨率 编辑:程序博客网 时间:2024/05/16 17:08
Delphi创建DLL时,IDE自动生成的文档中写得很清楚,当在DLL中以动态数组或String做为参数或返回值时(即RTL自动维护的数据类型),请在每个工程文件的第一个单元加上ShareMem。这样就可以使宿主程序与DLL共享内存管理器了!
这样的话,在发布程序时需要把borlndmm.DLL一同发布!
问题1:
为何要加到工程文件的第一个单元?
对于DLL和主程序这样的程序结构来说,使用2个内存管理器,在返回的数据类型为string的话,仅仅在主程序中将内存管理器中将引用数加1,而DLL的引用数不变,这样当退出DLL过程中,由于引用数为0,要对返回值进行释放,由于主程序中的数据为一个地址,将DLL地址释放,主程序中必然发生AV错误!
至于为什么ShareMem必须放第一个单元,那是因为Delphi的单元文件的initialization
的执行顺序,与dpr中引用这个单元的顺序有关;dpr中某单元引用越靠前,则某单元的initialization就越先执行!而我们程序的 内存管理器的"替换"过程就是在initialization块里实现的 看看Delphi的ShareMem里的一点代码就了解了!
问题2:
为何要把borlndmm.dll一同发布?
请参见ShareMem.pas源码!
最后建议大家使用FastMM,borlndmm.dll已经成为一般过去式了~
- DLL何时需共享内存管理器
- DLL何时需共享内存管理器
- DLL共享内存
- DLL 内存共享
- DLL内存分配与共享
- 显示调用共享内存dll
- DLL实现数据内存共享
- DLL内存映像共享数据
- 文件内存映射 DLL共享 WM_COPYDATA
- 旗正规则管理器使用——内存表共享
- 使用DLL在进程间共享内存_如何在多进程中用共享DLL
- 内存管理器
- 内存管理器
- 借助内存映像文件实现DLL共享EXE中的ADOConnection
- DLL与Exe利用共享内存通信模拟
- c#调用c++dll共享内存需要函数
- Windows 程序设计 第二十一章 DLL中共享内存数据
- 在共享 DLL 中使用 MFC 出现内存泄漏
- 快速删除系统服务命令 sc delete ServiceName(转)
- SilverLight 系列第二讲:使用Canvas对象
- SilverLight 系列第二讲:使用Canvas对象
- ASP.NET MVC框架开发系列课程(8):AJAX
- CMFCListCtrl自动排序的实现
- DLL何时需共享内存管理器
- ASP.NET MVC框架开发系列课程(8):AJAX
- ASP.NET MVC框架开发系列课程(8):AJAX
- ASP.NET MVC框架开发系列课程(8):AJAX
- 安装了CB2009却发现没有VCL源码?
- var目录 分析
- 领略Spring 3.x 时代的Spring MVC
- 换手率
- 分频----vhdl语言将时钟信号分为四种相位