인터페이스를 반환하는 함수를 내보내는 dll이 있습니다.FreeLibrary가 호출되기 전에 인터페이스 인스턴스가 해제되도록하려면 어떻게해야합니까?
내 보낸 함수를 호출하는 데 사용되는 LoadLibrary, GetProcAddress 및 FreeLibrary 함수에 대한 래퍼를 만들었습니다.
TInterfaceGetter = class
private
...
public
constructor Create;
destructor Destroy; override;
function GetInterface: IMyInterface;
end;
이 래퍼 게으른로드 DLL 및 GetInterface이 처음이라고 내 보낸 함수의 모듈 핸들 및 PROC 주소를 캐시합니다. FreeLibrary에 대한 호출은 래퍼의 소멸자에서 발생합니다.
래퍼를 해제 한 후 클라이언트 코드가 인터페이스 참조에 멈추는 경우를 제외하면 모든 것이 훌륭하게 작동합니다. 인터페이스 참조가 결국 범위를 벗어날 때 _IntfClear에 대한 결과 호출은 dll과 사용중인 메모리가 클라이언트의 메모리 공간에서 이미 언로드 되었기 때문에 액세스 위반을 발생시킵니다.
어떻게해야합니까? COM 구현이 어떻게이 시나리오를 처리합니까?