Вызов расширений и функций расширений
Чтобы загрузить библиотеку расширений (или получить дескриптор для уже загруженной библиотеки расширений), используйте 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);
}