我正在将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的那些,这将解决问题。
答案 0 :(得分:3)
这是一个包,您不需要使用ShareMem。而是链接运行时包,确保链接到rtl包。因为您的代码链接到rtl包,所以您自然会共享运行时,包括内存分配器。
我想我可以将DLL的内存管理器功能挂钩到IDE的那些功能,这样可以解决问题。
这似乎是错误的方式。您只需要安排您的DLL链接运行时包。