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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk