Aufrufen von Erweiterungen und Erweiterungsfunktionen

Verwenden Sie AddExtension, um eine Erweiterungsbibliothek zu laden (oder ein Handle für eine bereits geladene Erweiterungsbibliothek zu erhalten). Eine Erweiterungsbibliothek kann mit RemoveExtension entladen werden.

Erweiterungsbefehle können mithilfe von CallExtension aufgerufen werden.

Erweiterungsfunktionen

Erweiterungsfunktionen sind Funktionen, die von Erweiterungsbibliotheken exportiert werden. Sie können einen beliebigen Funktionsprototyp verwenden und werden direkt mit C-Funktionszeigern aufgerufen.

Sie sind keine Erweiterungsbefehle und nicht über Debuggerbefehle verfügbar. Erweiterungsfunktionen können nicht remote aufgerufen werden. sie müssen direkt aufgerufen werden. Daher können sie nicht von Debugclients verwendet werden. Sie können nur aufgerufen werden, wenn sich das Clientobjekt innerhalb der Host-Engine befindet – wenn kein Remotedebuggen oder ein smarter Client verwendet wird.

Erweiterungsfunktionen werden innerhalb von Erweiterungsbibliotheken durch den namen vorangestellten "_EFN_" identifiziert.

Verwenden Sie GetExtensionFunction, um einen Zeiger auf eine Erweiterungsfunktion zu erhalten. Der Typ dieses Funktionszeigers sollte mit dem Prototyp der Erweiterungsfunktion übereinstimmen. Die Erweiterungsfunktion kann jetzt wie jeder andere Funktionszeiger in C aufgerufen werden.

Beispiel

Wenn die folgende Erweiterungsfunktion in einer Erweiterungsbibliothek enthalten und in die Debugger-Engine geladen wurde:

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

Sie kann mit Folgendem aufgerufen werden:

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);
}