共用方式為


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 取得的資訊而定。

價值 描述
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的值。

詢問是否應該列印名稱時: 未使用。

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

[in, out] BufferChars

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

詢問是否應該列印名稱時: 未使用。

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

傳回值

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

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

取得單行表示法時 Buffer 包含所要求的單行表示法。

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

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

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

 

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

言論

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

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

Dbgeng.h 頭文件中 PDEBUG_EXTENSION_KNOWN_STRUCT 呼叫 KnownStructOutput

要求

要求 價值
目標平臺 桌面
標頭 dbgeng.h

另請參閱

DebugExtensionInitialize