Metode IDataModelConcept::InitializeObject (dbgmodel.h)

Model data dapat didaftarkan sebagai visualizer kanonis atau sebagai ekstensi untuk jenis asli tertentu melalui metode RegisterModelForTypeSignature atau RegisterExtensionForTypeSignature manajer data. Ketika model didaftarkan melalui salah satu metode ini, model data secara otomatis dilampirkan sebagai model induk ke objek asli apa pun yang jenisnya cocok dengan tanda tangan yang diteruskan dalam pendaftaran. Pada titik di mana lampiran tersebut dibuat secara otomatis, metode InitializeObject dipanggil pada model data. Ini melewati objek instans, jenis tanda tangan yang menyebabkan lampiran, dan enumerator yang menghasilkan instans jenis (dalam urutan linier) yang cocok dengan kartubebas apa pun dalam tanda tangan jenis. Implementasi model data dapat menggunakan panggilan metode ini untuk menginisialisasi cache apa pun yang diperlukannya.

Sintaks

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

Parameter

modelObject

Objek instans yang sedang diinisialisasi.

matchingTypeSignature

Jenis tanda tangan yang cocok dengan jenis asli modelObject yang menyebabkan lampiran model data.

wildcardMatches

Jika tanda tangan jenis yang cocok menyertakan kartubebas, argumen ini akan berisi enumerator yang akan menghitung bagaimana setiap kartubebas cocok. Biasanya, setiap IDebugHostSymbol yang dijumlahkan di sini adalah IDebugHostType. Artinya, tidak, namun persyaratan. Argumen templat non-jenis (antara lain) dapat mencocokkan kartubebas dan dapat menghasilkan simbol seperti IDebugHostConstant.

Mengembalikan nilai

Metode ini mengembalikan HRESULT yang menunjukkan keberhasilan atau kegagalan. Gagal metode ini akan mencegah konstruksi objek instans.

Keterangan

Perhatikan bahwa implementasi model data tertentu tidak dapat mengasumsikan bahwa panggilan InitializeObject akan dilakukan untuk setiap objek tempat model data dilampirkan. Karena model data adalah sistem yang sepenuhnya dinamis, pemanggil sepenuhnya mungkin untuk memperoleh model secara langsung (melalui, misalnya, metode GetParentModel pada IModelObject) dan melampirkannya secara manual. Dalam keadaan seperti itu, panggilan InitializeObject tidak akan dilakukan dan implementasi harus siap untuk melakukannya. Pemanggilan metode ini adalah pengoptimalan untuk memungkinkan implementasi mahal untuk mengisi dan menginisialisasi cache yang diperlukan sebelumnya.

Contoh Implementasi

Perhatikan bahwa klien tidak akan pernah memanggil antarmuka ini.

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

Persyaratan

Persyaratan Nilai
Header dbgmodel.h

Lihat juga

Antarmuka IDataModelConcept