Metode IModelObject::SetContextForDataModel (dbgmodel.h)
Metode SetContextForDataModel digunakan oleh implementasi model data untuk menempatkan data implementasi pada objek instans. Secara konseptual, setiap IModelObject (panggil ini instans untuk kesederhanaan) berisi tabel status hash. Tabel hash diindeks oleh lain IModelObject (panggil ini model data untuk kesederhanaan) yang berada dalam hierarki model induk instans. Nilai yang terkandung dalam hash ini adalah sekumpulan informasi status yang dihitung referensi yang diwakili oleh instans IUnknown. Setelah model data mengatur status ini pada instans, model data dapat menyimpan data implementasi arbitrer yang dapat diambil selama hal-hal seperti getter properti.
Sering kali ekstensi (atau komponen model data lainnya) ingin mewakili beberapa konstruksi sintetis seperti apa yang mungkin dipertimbangkan oleh seseorang. Debugger yang mengekspos objek proses adalah salah satu contoh seperti itu. Sering kali, implementasi akan memetakan gagasan definisi jenis ke model data. Model data akan berisi getter properti untuk hal-hal yang diekspos pada objek (misalnya: nama proses, id proses, jumlah utas, utas, dll...). Ketika saatnya untuk membuat instans model data ini, objek sintetis kosong dibuat dan model data (atau apa yang mungkin kita pertimbangkan definisi jenis) dilampirkan sebagai model induk. Dalam beberapa kasus, informasi yang cukup untuk mengidentifikasi objek secara unik dan mengimplementasikan semua getter properti model data mungkin dapat langsung ditempatkan pada objek instans. Dalam contoh proses kami, id proses mungkin disimpan sebagai kunci bernama Id pada instans. Ketika getter pada model data dipanggil, katakanlah untuk nama proses, misalnya, implementasi hanya dapat memanggil metode GetKeyValue untuk mengambil Id proses. Implementasi yang diperlukan untuk mengembalikan nama kemudian dapat melakukannya dari PID. Dalam kasus lain, status yang diperlukan untuk mengimplementasikan jenis ini lebih kompleks, berisi konstruksi asli lainnya, atau karena alasan lain tidak dapat ditetapkan sebagai kunci instans. Dalam kasus seperti itu, model data akan membangun kelas turunan IUnknown, menempatkan data implementasi dalam kelas ini, dan memanggil metode SetContextForDataModel pada instans untuk mengaitkan data implementasinya dengan objek instans. Ketika instans dinonaktifkan, jumlah referensi pada kelas status akan dirilis dan akan dibebaskan sesuai kebutuhan
HRESULT SetContextForDataModel(
IModelObject *dataModelObject,
IUnknown *context
);
dataModelObject
IModelObject mewakili model data yang statusnya disimpan pada objek instans. Ini, berlaku, kunci hash ke objek status terkait.
context
Status yang dikaitkan dengan instans. Arti pasti dari ini (dan antarmuka lain, dll... yang didukungnya) terserah model data yang melakukan panggilan untuk mengatur status ini. Satu-satunya persyaratan adalah bahwa status tersebut adalah referensi COM dihitung.
Metode ini mengembalikan HRESULT yang menunjukkan keberhasilan atau kegagalan.
Sampel Kode
ComPtr<IModelObject> spObject; /* get an object */
ComPtr<IModelObject> spDataModelObject; /* get an attached data model (from earlier
AddParentModel or from GetParentModel) anywhere in
the ancestor tree */
// Context data must be IUnknown derived. Otherwise, implementation is opaque to the data model.
class MyContextData :
public Microsoft::WRL::RuntimeClass<
Microsoft::WRL::RuntimeClassFlags<Microsoft::WRL::RuntimeClassType::ClassicCom>,
IUnknown
>
{
/* put whatever you want here */
};
ComPtr<MyContextData> spContextData = Microsoft::WRL::Make<MyContextData>();
if (SUCCEEDED(spObject->SetContextForDataModel(spDataModelObject.Get(), spContextData.Get())))
{
// There is now context data associated with spObject (an instance) for
// spDataModelObject (a parent model). This can be fetched via
// GetContextForDataModel. Note that spObject and spDataModelObject only need t
// to be related. The model does not need to be an immediate parent.
}
Syarat | Nilai |
---|---|
Header | dbgmodel.h |
antarmuka IModelObject