Ekstensi Panggilan dan Fungsi Ekstensi

Untuk memuat pustaka ekstensi (atau untuk mendapatkan handel untuk pustaka ekstensi yang sudah dimuat), gunakan AddExtension. Pustaka ekstensi dapat dibongkar dengan RemoveExtension.

Perintah ekstensi dapat dipanggil menggunakan CallExtension.

Fungsi Ekstensi

Fungsi ekstensi adalah fungsi yang diekspor oleh pustaka ekstensi. Mereka dapat menggunakan prototipe fungsi apa pun dan dipanggil langsung menggunakan penunjuk fungsi C.

Perintah ini bukan perintah ekstensi dan tidak tersedia melalui perintah debugger. Fungsi ekstensi tidak dapat dipanggil dari jarak jauh; mereka harus dipanggil secara langsung. Oleh karena itu mereka tidak dapat digunakan dari klien penelusuran kesalahan. Mereka hanya dapat dipanggil ketika objek klien berada di dalam mesin host - ketika tidak melakukan debug dari jarak jauh atau saat menggunakan klien pintar.

Fungsi ekstensi diidentifikasi dalam pustaka ekstensi oleh "_EFN_" yang telah ditambahkan ke namanya.

Untuk mendapatkan pointer ke fungsi ekstensi, gunakan GetExtensionFunction. Jenis penunjuk fungsi ini harus cocok dengan prototipe fungsi ekstensi. Fungsi ekstensi sekarang dapat dipanggil sama seperti penunjuk fungsi lainnya di C.

Contoh

Jika fungsi ekstensi berikut disertakan dalam pustaka ekstensi dan dimuat ke dalam mesin debugger:

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

Ini dapat dipanggil menggunakan:

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