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