DbkDebug240.bpl
からいくつかの関数をIDEプラグインにフックしています。
フックは正常に機能しますが、いくつかの文字列データを使用する必要があります。BorlndMM.dllを使用しないDLLから文字列を使用するには
問題は、DbkDebug*.bpl
はShareMemを使用していません。つまり、BorlndMM.dll
はインポートされません。これは、文字列を返す関数を呼び出すために問題が発生しますが、例外を発生させることなくこれを行うことはできません。
これを横向きにして修正することができます(つまり、PChar
を使用します)が、リークが発生します。
例:
function GetExceptionMessage: Unicodestring; external 'Dbk240.bpl'
name '@[email protected]@GetExceptionMessage$qqrv';
//causes exceptions further down the line.
function GetExceptionMessage: PChar; external 'Dbk240.bpl'
name '@[email protected]@GetExceptionMessage$qqrv';
//I think this causes a leak futher down the line.
が漏れないように、ShareMemを使用していないDLLから文字列を返す関数を呼び出す方法はありますか?
問題は、私のプラグインがDLLにあることです。私はDLLのメモリマネージャの機能をIDEのものに引っ掛けて問題を解決できると思う。
dbkdebugをパッケージに含めることはできません。これには.dcpファイルはありません。だから私は何をすべきか分からない。 – Johan
私はここにDLLがないことに注意してください。私が見るのはパッケージからのいくつかの機能だけです。私はあなたのプログラムの構造が何であるかという概念を持っていません。私はあなたがパッケージで作業しているときにDLLを参照する理由を理解していません。私たちの視点から物事を想像してみてください。私はこのページで見ることができるものがあります。私が言うことは、パッケージはShareMemを使用せず、むしろrtlパッケージの使用を共有することによって、メモリマネージャを共有するということです。だからあなたはどこにでもShareMemを持ってはいけません。 –
OK、どこでもShareMemを削除してください。私のコードはDLLに入っていても、私はRTLパッケージにリンクしています。あれは正しいですか? – Johan