확장 및 확장 함수 호출

확장 라이브러리를 로드하거나 이미 로드된 확장 라이브러리에 대한 핸들을 가져오려면 AddExtension을 사용합니다. RemoveExtension을 사용하여 확장 라이브러리를 언로드할 수 있습니다.

확장 명령은 CallExtension을 사용하여 호출할 수 있습니다.

확장 함수

확장 함수는 확장 라이브러리에서 내보내는 함수입니다. 모든 함수 프로토타입을 사용할 수 있으며 C 함수 포인터를 사용하여 직접 호출됩니다.

확장 명령은 아니며 디버거 명령을 통해 사용할 수 없습니다. 확장 함수는 원격으로 호출할 수 없습니다. 직접 호출해야 합니다. 따라서 클라이언트 디버깅에서 사용할 수 없습니다. 원격으로 디버깅하지 않거나 스마트 클라이언트를 사용하는 경우 클라이언트 개체가 호스트 엔진 내에 있을 때만 호출할 수 있습니다.

확장 함수는 확장 라이브러리 내에서 이름 앞에 "_EFN_"으로 식별됩니다.

확장 함수에 대한 포인터를 가져오려면 GetExtensionFunction을 사용합니다. 이 함수 포인터의 형식은 확장 함수의 프로토타입과 일치해야 합니다. 이제 C의 다른 함수 포인터와 마찬가지로 확장 함수를 호출할 수 있습니다.

예제

다음 확장 함수가 확장 라이브러리에 포함되어 디버거 엔진에 로드된 경우:

HRESULT CALLBACK
_EFN_GetObject(IDebugClient * client, SomeObject * obj);

다음을 사용하여 호출할 수 있습니다.

typedef ULONG (CALLBACK * GET_OBJECT)(IDebugClient * client, SomeObject * obj);



HRESULT status = S_OK;
GET_OBJECT extFn = NULL;
SomeObject myObj;

if (g_DebugControl->
        GetExtensionFunction(0,
                             "GetObject",
                             (FARPROC *) &extFn ) == S_OK &&
    extFn)
{
    status = (*extFn)(client, &myObj);
}