调用扩展和扩展函数

若要加载扩展库(或获取已加载扩展库的句柄),请使用 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);
}