And*_*rey 0 delphi dll memory-leaks memory-management
我需要编写一个DLL(使用Delphi),它动态加载到delphi应用程序中并进行RTTI查询(典型的操作是获取控件属性的字符串值).经典的问题是在应用程序和DLL之间传递字符串(和对象)是有问题的,因为两者中使用了不同的内存管理器(这可能导致内存问题,例如DLL的内存管理器会尝试释放由Application的内存管理器分配的内存).
有没有办法以不依赖于delphi版本的方式将DLL的内存管理器设置为应用程序的内存管理器?有什么想法吗?
2010年10月编辑:
由于对这个主题的兴趣几乎消失了 - 我将描述我最终得到的(非常差的)解决方案,以便其他人理解为什么我不接受任何建议的答案.
因此,一个哈克的方式来执行这样的事情是要找到RVA的MemoryManager结构(参见System.pas的实现部分)和DLL硬编码.这样,DLL就能够将其私有内存管理器设置为与其加载的应用程序相同.它适用于一些限制和问题; 无论如何 - 它非常依赖于Delphi编译器和链接器选项.
虽然这不是我正在寻找的答案 - 我没想到比这更好的东西.
为您的应用程序和DLL使用相同的内存管理器.
对于包含新的FastMM内存管理器的Delphi的最新版本,使用SimpleShareMem作为应用程序和DLL项目中的第一个单元.
或者从SourceForge下载完整的FastMM4,在FastMM4Options.Inc(ShareMM,ShareMMIfLibrary,AttemptToUseSharedMM)中设置Flags,并将FastMM4作为应用程序和DLL项目中的第一个单元.