c++ dll のアンマネージ オブジェクトへの匿名整数ハンドルを保持する ac# dll にマネージ オブジェクトがあります。c++ dll 内では、匿名整数が std::map で使用され、アンマネージ c++ オブジェクトが取得されます。このメカニズムにより、匿名の整数ハンドルを使用して、マネージド オブジェクトとアンマネージド オブジェクトの間の緩やかな関連付けを維持できます。
管理対象オブジェクトの finalize メソッド (デストラクタ) で、管理対象外の dll を呼び出して、管理対象外オブジェクトを削除します。
C# プログラムは問題なく実行されますが、プログラムの終了時に問題が発生します。マネージド側での削除操作の順序を制御できないため、アンマネージド dll はマネージド オブジェクトの前にメモリから削除されます。したがって、管理対象オブジェクトのデストラクタが呼び出されると (次に、管理対象外のデストラクタが [少なくとも間接的に] 呼び出されます)、管理対象外オブジェクトは既に削除されており、プログラムはクラッシュします。
では、ac# プログラムのマネージド オブジェクトに関連付けられている外部 C++ DLL のアンマネージド オブジェクトを安全に削除するにはどうすればよいでしょうか。
ありがとう
アンドリュー