Condividi tramite


Chiamare estensioni e funzioni di estensione

Per caricare una libreria di estensioni (o per ottenere un handle per una libreria di estensioni già caricata), usare AddExtension. È possibile scaricare una libreria di estensioni con RemoveExtension.

I comandi di estensione possono essere chiamati usando CallExtension.

Funzioni di estensione

Le funzioni di estensione sono funzioni esportate dalle librerie di estensioni. Possono usare qualsiasi prototipo di funzione e vengono chiamati direttamente usando i puntatori a funzione C.

Non sono comandi di estensione e non sono disponibili tramite i comandi del debugger. Le funzioni di estensione non possono essere chiamate in remoto; devono essere chiamati direttamente. Di conseguenza, non possono essere usati dai client di debug. Possono essere chiamati solo quando l'oggetto client si trova all'interno del motore host, quando non viene eseguito il debug remoto o quando si usa un client intelligente.

Le funzioni di estensione vengono identificate all'interno delle librerie di estensioni da "_EFN_" anteporte ai relativi nomi.

Per ottenere un puntatore a una funzione di estensione, usare GetExtensionFunction. Il tipo di puntatore di questa funzione deve corrispondere al prototipo della funzione di estensione. La funzione di estensione può ora essere chiamata esattamente come qualsiasi altro puntatore a funzione in C.

Esempio di

Se la funzione di estensione seguente è stata inclusa in una libreria di estensioni e caricata nel motore del debugger:

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

Potrebbe essere chiamato usando:

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