-1

dll で使用され、プロセスにロードされるグラフィカル ライブラリがあります。ライブラリ リークが発生しているようです (プロセス エクスプローラーのプロパティ ダイアログの GDI ハンドル数が数回ロード/アンロードされている間、プロセス全体で絶えず増加します)。

dll によって作成されたすべての GDI ハンドルを保存して、dll がアンロードされた後にそれらをすべて削除する方法はありますか? たとえば、CreateBitmap() などをフックしますか? しかし、プロセス自体ではなく、リソースが dll によって作成されているかどうかを判断するにはどうすればよいでしょうか?

よろしく、

4

3 に答える 3

2

dll によって作成されたすべての GDI ハンドルを保存して、dll がアンロードされた後にそれらをすべて削除する方法はありますか? たとえば、CreateBitmap() などをフックしますか? しかし、プロセス自体ではなく、リソースが dll によって作成されているかどうかを判断するにはどうすればよいでしょうか?

いいえ。この問題をソースで修正する必要があります。DLL が実際にハンドルをリークしている場合は、DLL を修正する必要があります。

于 2015-08-03T14:27:13.483 に答える
1

DLL によって開かれているすべてのハンドルを閉じ、すべてのリソースを解放する方法は、DLL をロードし、DLL がアンロードされた後に終了する別のプロセスを使用することです。したがって、どちらの労力が大きいかを評価できます。DLL を修正するか、別の DLL (リークせず、おそらく他の多くの落とし穴がない) を見つけるか、プロセス間通信を実装してハンドルを解放し、引き続きDLL。後者の方法を選択すると、共有メモリのブロックを使用してプロセス間で描画されたビットマップを転送したり、名前付きイベントを使用して同期したりできます。

于 2015-08-03T14:44:04.757 に答える