共用方式為


PDEBUG_EXTENSION_KNOWN_STRUCT回呼函式 (dbgeng.h)

引擎會呼叫 KnownStructOutput 回呼函式,以要求擴充 DLL 可格式化列印之結構的相關信息。 引擎會基於下列原因呼叫此函式。

  • 取得 DLL 可以格式化以進行列印的結構清單。
  • 取得特定結構的單行表示法。
  • 詢問特定結構是否應該列印其名稱及其單行表示法。
'''cpp CALLBACK* PDEBUG_EXTENSION_KNOWN_STRUCT KnownStructOutput;'''

語法

PDEBUG_EXTENSION_KNOWN_STRUCT PdebugExtensionKnownStruct;

HRESULT PdebugExtensionKnownStruct(
  [in]      ULONG Flags,
  [in]      ULONG64 Offset,
  [in]      PSTR TypeName,
  [out]     PSTR Buffer,
  [in, out] PULONG BufferChars
)
{...}

參數

[in] Flags

下列其中一個值,視引擎想要從擴充 DLL 取得的資訊而定。

Description
DEBUG_KNOWN_STRUCT_GET_NAMES 取得結構名稱的清單。
DEBUG_KNOWN_STRUCT_SUPPRESS_TYPE_NAME 詢問結構是否應該列印其名稱。
DEBUG_KNOWN_STRUCT_GET_SINGLE_LINE_OUTPUT 取得結構的單行表示法。

[in] Offset

取得名稱清單時: 閑置。

詢問是否應該列印名稱時: 閑置。

取得單行表示法時: 指定要列印之結構之目標記憶體位址空間中的位置。

[in] TypeName

取得名稱清單時: 閑置。

詢問是否應該列印名稱時: 指定結構的名稱。 這是從DEBUG_KNOWN_STRUCT_GET_NAMES查詢傳回的其中一個名稱。

取得單行表示法時: 指定結構的名稱。 這是從DEBUG_KNOWN_STRUCT_GET_NAMES查詢傳回的其中一個名稱。

[out] Buffer

取得名稱清單時: 接收延伸模組可以格式化列印之結構的名稱清單。 每個名稱組之間必須出現一個 Null 字元。 清單必須以兩個 Null 字元終止。 寫入此緩衝區的字元數不得超過 BufferSize 的值。

詢問是否應該列印名稱時: 閑置。

取得單行表示法時: 接收結構表示,由 StructNameAddress 識別為字串。 寫入此緩衝區的字元數不得超過 BufferSize 的值。

[in, out] BufferChars

取得名稱清單時: 在輸入上,指定 Buffer 的大小,以字元為單位。 在輸出中,如果緩衝區太小,則會收到所需的緩衝區大小。

詢問是否應該列印名稱時: 閑置。

取得單行表示法時: 在輸入上,指定 Buffer 的大小,以字元為單位。 在輸出中,如果緩衝區太小,則會收到所需的緩衝區大小。

傳回值

傳回碼 描述
S_OK
取得名稱清單時: 緩衝區 包含要求的名稱清單。

詢問是否應該列印名稱時: 應該隱藏名稱的列印。 也就是說,不應該列印名稱。

取得單行表示法時: 緩衝區 包含要求的單行表示法。

S_FALSE
取得名稱清單時: BufferSize 在輸入上太小。 在輸出上, BufferSize 包含所需的緩衝區大小。

詢問是否應該列印名稱時: 不應該隱藏名稱的列印。 也就是說,應該列印名稱。

取得單行表示法時: BufferSize 在輸入上太小。 在輸出上, BufferSize 包含所需的緩衝區大小。

 

所有其他傳回值都表示函式失敗。 引擎會繼續忽略 Buffer 的內容。

備註

此函式是選擇性的。 延伸模組 DLL 只有在能夠格式化特殊結構以在單一行上列印時,才需要匯出 KnownStructOutput 。 引擎會依名稱在擴充 DLL 中尋找此函式。

初始化擴充 DLL 之後,引擎會呼叫此函式來查詢 DLL 以瞭解其如何列印的結構名稱清單。 然後,每當引擎列印其中一個名稱在清單中的結構摘要時,它會呼叫此函式來格式化結構以進行列印。

KnownStructOutput 在 Dbgeng.h 頭文件中稱為 PDEBUG_EXTENSION_KNOWN_STRUCT

規格需求

需求
目標平台 桌面
標頭 dbgeng.h

另請參閱

DebugExtensionInitialize