共用方式為


IDataModelConcept::InitializeObject 方法 (dbgmodel.h)

數據模型可以透過數據模型管理員的 RegisterModelForTypeSignature 或 RegisterExtensionForTypeSignature 方法,註冊為標準可視化檢視或指定原生類型的延伸模組。 透過上述任一方法註冊模型時,數據模型會自動附加為父模型至任何符合註冊中傳遞之簽章的原生物件。 在自動建立該附件時,會在數據模型上呼叫 InitializeObject 方法。 它會傳遞實例物件、造成附件的類型簽章,以及產生類型實例的列舉值(以線性順序)比對類型簽章中的任何通配符。 數據模型實作可能會使用這個方法呼叫來初始化它所需的任何快取。

語法

HRESULT InitializeObject(
  IModelObject               *modelObject,
  IDebugHostTypeSignature    *matchingTypeSignature,
  IDebugHostSymbolEnumerator *wildcardMatches
);

參數

modelObject

正在初始化的實例物件。

matchingTypeSignature

造成數據模型附件的modelObject原生類型相符的類型簽章。

wildcardMatches

如果比對類型簽章包含通配符,這個自變數會包含列舉值,列舉每個通配符的比對方式。 一般而言,這裡列舉的每個 IDebugHostSymbol 都是 IDebugHostType。 不過,這不是需求。 非類型樣板自變數(以及其他事項)可以比對通配符,而且可能會產生符號,例如 IDebugHostConstant

傳回值

此方法會傳回表示成功或失敗的 HRESULT。 如果這個方法失敗,將防止實例的物件建構。

言論

請注意,指定的數據模型實作無法假設會針對附加數據模型的每個對象進行 InitializeObject 呼叫。 由於數據模型是完全動態的系統,因此呼叫者完全有可能直接取得模型(例如,透過 IModelObject上的 GetParentModel 方法,並手動附加模型。 在這種情況下,不會進行 InitializeObject 呼叫,而且必須準備好實作才能執行這項作業。 此方法的呼叫是一項優化,可讓昂貴的實作預先填入和預先初始化必要的快取。

實作範例

請注意,客戶端永遠不會呼叫這個介面。

//
// InitializeObject is an implementation of the interface method on some 
// class representing a data model.  Consider that the class has a GetObject() method
// which returns the IModelObject for the data model
//
// Let's also imagine that this registered for the type signature "std::vector<*>"
//
IFACEMETHOD(InitializeObject)(_In_ IModelObject *pContextObject, _In_ IDebugHostTypeSignature *pTypeSignature, _In_ IDebugHostSymbolEnumerator *pWildcardMatches)
{
    HRESULT hr = S_OK;

    // The minimal implementation is "return S_OK;"
    // Typically, this is used to fill cache information.  Imagine we have a 
    // cache in the context data.
    ComPtr<IUnknown> spCtxData;
    hr = pContextObject->GetContextForDataModel(GetObject(), &spCtxData));
    if (SUCCEEDED(hr))
    {
        CacheData *pCacheData = static_cast<CacheData *>(spCtxData.Get());

        // Find the instance type.  This is the template argument(s) which 
        // matched the * in 'std::vector<*>'
        ComPtr<IDebugHostSymbol> spFirstMatch;
        hr = pWildcardMatches->GetNext(&spFirstMatch));
        if (SUCCEEDED(hr))
        {
            SymnbolKind sk;
            ComPtr<IDebugHostType> spFirstType;
            if (SUCCEEDED(hr = spFirstMatch->GetSymbolKind(&sk)) && sk == SymbolType &&
                SUCCEEDED(hr = spFirstMatch.As(&spFirstType))))
            {
                pCacheData->SetInstanceType(spFirstType.Get()));
            }
        }
    }

    return hr;
}

要求

要求 價值
標頭 dbgmodel.h

另請參閱

IDataModelConcept 介面