Llamar a extensiones y funciones de extensión

Para cargar una biblioteca de extensiones (o para obtener un identificador para una biblioteca de extensiones ya cargada), use AddExtension. Una biblioteca de extensiones se puede descargar con RemoveExtension.

Se puede llamar a los comandos de extensión mediante CallExtension.

Funciones de extensión

Las funciones de extensión son funciones exportadas por bibliotecas de extensiones. Pueden usar cualquier prototipo de función y se llaman directamente mediante punteros de función de C.

No son comandos de extensión y no están disponibles a través de comandos del depurador. No se puede llamar a las funciones de extensión de forma remota; deben llamarse directamente. Por lo tanto, no se pueden usar desde clientes de depuración. Solo se pueden llamar cuando el objeto de cliente está dentro del motor host, cuando no se depura de forma remota o cuando se usa un cliente inteligente.

Las funciones de extensión se identifican dentro de las bibliotecas de extensiones por "_EFN_" anteponedas a sus nombres.

Para obtener un puntero a una función de extensión, use GetExtensionFunction. El tipo de este puntero de función debe coincidir con el prototipo de la función de extensión. Ahora se puede llamar a la función de extensión igual que cualquier otro puntero de función en C.

Ejemplo

Si la siguiente función de extensión se incluyó en una biblioteca de extensiones y se cargó en el motor del depurador:

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

Se podría llamar mediante:

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