如何使用不使用BorlndMM.dll的DLL中的字符串

时间:2017-06-20 09:52:32

标签: string delphi dll

我正在将DbkDebug240.bpl中的一些函数挂钩到IDE插件中 挂钩工作正常,但我需要使用一些字符串数据。

问题是DbkDebug*.bpl不使用ShareMem;即它不导入BorlndMM.dll。这会导致问题,因为我想调用返回字符串的函数,但是如果不引起异常,我就不能这样做 我可以通过撒谎来“解决”这个问题(即使用PChar),但随后我就会泄漏。

示例:

function GetExceptionMessage: Unicodestring; external 'Dbk240.bpl' 
   name '@Debug@TDebugger@GetExceptionMessage$qqrv';
//causes exceptions further down the line.

function GetExceptionMessage: PChar; external 'Dbk240.bpl' 
   name '@Debug@TDebugger@GetExceptionMessage$qqrv';
//I think this causes a leak futher down the line.

有没有办法调用从不会以不泄漏的方式使用ShareMem的dll返回字符串的函数?

问题是我的插件是在DLL中。我想我可以将DLL的内存管理器的功能挂钩到IDE的那些,这将解决问题。

1 个答案:

答案 0 :(得分:3)

这是一个包,您不需要使用ShareMem。而是链接运行时包,确保链接到rtl包。因为您的代码链接到rtl包,所以您自然会共享运行时,包括内存分配器。

  

我想我可以将DLL的内存管理器功能挂钩到IDE的那些功能,这样可以解决问题。

这似乎是错误的方式。您只需要安排您的DLL链接运行时包。