Metode IModelObject::AddParentModel (dbgmodel.h)

Metode AddParentModel menambahkan model induk baru ke objek yang diberikan. Model tersebut dapat ditambahkan di akhir rantai pencarian (argumen penimpaan ditentukan sebagai false) atau di bagian depan rantai pencarian (argumen ambil alih ditentukan sebagai true). Selain itu, setiap model induk dapat secara opsional menyesuaikan konteks (semantik penunjuk ini) untuk properti atau konsep apa pun pada induk yang diberikan (atau siapa pun dalam hierarki induknya). Penyesuaian konteks jarang digunakan tetapi memungkinkan beberapa konsep kuat seperti penyematan objek, membangun namespace layanan, dll...

Ketika model induk memiliki penyesuaian konteks, model data inti akan melakukan penyesuaian ini secara otomatis atas nama pemanggil. Efeknya, untuk instans objek dengan induk model induk yang memiliki penyesuaian konteks ke newContext, panggilan

instance->GetKeyValue("someKey", &pValue, nullptr);

akan akhirnya mengubah konteks/penunjuk ini dari instans ke newContext sebelum memanggil metode GetValue someKey karena akses ke someKey melewati penyesuaian konteks.

Setiap IModelObject yang ditambahkan sebagai model induk ke objek lain harus secara individual mendukung konsep IDataModelConcept. Kegagalan untuk menerapkan konsep ini dapat mengakibatkan panggilan metode AddParentModel gagal.

Sintaks

HRESULT AddParentModel(
  IModelObject *model,
  IModelObject *contextObject,
  bool         override
);

Parameter

model

IModelObject yang akan ditambahkan ke rantai model induk dari objek yang diberikan. IModelObject ini harus secara individual mendukung konsep IDataModelConcept.

contextObject

Jika model data memiliki penyesuaian konteks yang terkait dengannya, konteks yang disesuaikan (atau pengaktor properti yang mengembalikan konteks yang disesuaikan) dapat diteruskan di sini.

override

Indikasi apakah model induk yang ditentukan oleh argumen model ditempatkan di bagian depan atau akhir rantai linier model induk. Nilai false (biasanya disediakan) menunjukkan akhir rantai. Nilai true menunjukkan bagian depan rantai.

Mengembalikan nilai

Metode ini mengembalikan HRESULT yang menunjukkan keberhasilan atau kegagalan.

Keterangan

** Sampel Kode**



ComPtr<IDataModelManager> spManager; /* get the data model manager */
ComPtr<IModelObject> spObject;       /* get an object */

// A data model *MUST* implement IDataModelConcept.  Create an implementation of this and a string conversion.
class MyDataModel :
    public Microsoft::WRL::RuntimeClass<
        Microsoft::WRL::RuntimeClassFlags<Microsoft::WRL::RuntimeClassType::ClassicCom>,
        IDataModelConcept,
        IStringDisplayableConcept
        >
{
public:
 
    IFACEMETHOD(InitializeObject)(_In_ IModelObject * /*pModelObject*/, 
                                  _In_opt_ IDebugHostTypeSignature * /*pMatchingSignature*/,
                                  _In_opt_ IDebugHostSymbolEnumerator * /*pWildcardMatches*/)
    {
        return S_OK;
    }

    IFACEMETHOD(GetName)(_Out_ BSTR *pModelName)
    { 
        return E_NOTIMPL;
    }

    IFACEMETHOD(ToDisplayString)(_In_ IModelObject * /*pContextObject*/, 
                                 _In_opt_ IKeyStore * /*pMetadata */, 
                                 _Out_ BSTR *pDisplayString)
    {
        *pDisplayString = SysAllocString(L"Hello World");
        return *pDisplayString == nullptr ? E_OUTOFMEMORY : S_OK;
    }
};

// Create the data model, an object for it, set concepts, and add it as a parent to spObject.
ComPtr<MyDataModel> spDataModel = Microsoft::WRL::Make<MyDataModel>();
ComPtr<IModelObject> spDataModelObject;
if (spDataModel != nullptr &&
    SUCCEEDED(spManager->CreateDataModelObject(spDataModel.Get(), &spDataModelObject)) &&
    SUCCEEDED(spDataModelObject->SetConcept(__uuidof(IStringDisplayableConcept),
                                            static_cast<IStringDisplayableConcept *>
                                                (spDataModel.Get()), 
                                            nullptr)))
{
    if (SUCCEEDED(spObject->AddParentModel(spDataModelObject.Get(), nullptr, false)))
    {
        // spObject has been *EXTENDED* to have a display string.  It has a parent model 
        // which has that concept.  That extension (and whatever else was added 
        // on spDataModelObject) can be removed with a single RemoveParentModel call.
    }
}

Persyaratan

Persyaratan Nilai
Header dbgmodel.h

Lihat juga

Antarmuka IModelObject