ACAPI_SetDllTermHookProc
비정상적인 종료의 경우 핸들러 프로시저를 세트합니다.
void ACAPI_SetDllTermHookProc ( APIDllTermHookProc* dllTermHookProc );
파라미터
- dllTermHookProc
- [in] 핸들러 함수 포인터
설명
일반적으로 애드온 모듈이 메모리에서 언로드 되기 전에 애드온의 FreeData 함수가 호출됩니다.
그러나 예외적인 경우 애드온들을 제대로 언로드하지 않고 애플리케이션이 종료됩니다.
이러한 상황을 처리하기 위해 ACAPI_SetDllTermHookProc
함수를 사용하여 후크 프로시저를 설정할 수 있습니다.
예를 들어, 애드온에서 추가 모듈(DLL)들을 로드하고 비정상적인 종료인 경우에도 모듈을 언로드하려는 경우 유용할 수 있습니다.
예제
#include "IOUtilities.hpp" static IOUtil::ModuleFile* additionalModule = NULL; //------------------------------------------------------ // 비정상 종료일 때 호출됨 //------------------------------------------------------ static void __ACENV_CALL MyDllTermHookProc (void) { if (additionalModule != NULL) { additionalModule->UnLoad (); delete additionalModule; additionalModule = NULL; } return; } //------------------------------------------------------ // 어떤 동작을 수행하기 위해 애드온이 메모리에 로드될 때 호출됨 //------------------------------------------------------ GSErrCode __ACENV_CALL Initialize (void) { additionalModule = new IOUtil::ModuleFile (IO::Location("AdditionalLibrary.DLL")); if (additionalModule != NULL) { if (additionalModule->Load () != NoError || additionalModule->GetProcAddress ("ExportedAdditionalFunction") == NULL) { additionalModule->UnLoad (); delete additionalModule; additionalModule = NULL; } } ACAPI_SetDllTermHookProc (MyDllTermHookProc); return NoError; } //------------------------------------------------------ // 애드온이 언로드 되려고 할 때 호출됨 //------------------------------------------------------ GSErrCode __ACENV_CALL FreeData (void) { if (additionalModule != NULL) { additionalModule->UnLoad (); delete additionalModule; additionalModule = NULL; } return NoError; }
요구사항
- 버전: API 10 또는 이후
- 헤더: ACAPinc.h