Interfaceを返す関数をエクスポートするDLLがあります。FreeLibraryが呼び出される前にInterfaceインスタンスが解放されるようにする方法
エクスポートされた関数を呼び出すために使用されるLoadLibrary、GetProcAddress、およびFreeLibrary関数のラッパーを作成しました。
TInterfaceGetter = class
private
...
public
constructor Create;
destructor Destroy; override;
function GetInterface: IMyInterface;
end;
怠惰なこのラッパーは、DLLをロードし、GETINTERFACEが初めて呼び出されたときにモジュールハンドルおよびエクスポート機能のprocのアドレスをキャッシュします。 FreeLibraryの呼び出しは、ラッパーのデストラクタで行われます。
ラッパーを解放した後にクライアントコードがインターフェイス参照にハングする場合を除いて、すべてがうまく動作します。インターフェイスの参照が最終的に有効範囲外になると、_IntfClearの呼び出しによって、dllおよび使用されているすべてのメモリがクライアントのメモリ空間から既にアンロードされているため、アクセス違反が発生します。
これをどのようにして正常に処理できますか?完全な吹き飛ばされたCOM実装は、このシナリオをどのように処理しますか?