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