Graphisoft®

API Development KitVersion: 18

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

 

참고사항

APIDllTermHookProc, FreeData, API 함수