Metode IPreferredRuntimeTypeConcept::CastToPreferredRuntimeType (dbgmodel.h)
Metode CastToPreferredRuntimeType dipanggil setiap kali klien ingin mencoba mengonversi dari instans jenis statis ke jenis runtime instans tersebut. Jika objek yang dimaksud mendukung (melalui salah satu model induk yang terlampir) konsep jenis runtime yang disukai, metode ini akan dipanggil untuk melakukan konversi. Metode ini dapat mengembalikan objek asli (tidak ada konversi atau tidak dapat dianalisis), mengembalikan instans baru dari jenis runtime, gagal karena alasan non-semantik (misalnya: kehabisan memori), atau mengembalikan E_NOT_SET. Kode kesalahan E_NOT_SET adalah kode kesalahan yang sangat khusus yang menunjukkan pada model data bahwa implementasi tidak ingin mengambil alih perilaku default dan bahwa model data harus kembali ke analisis apa pun yang dilakukan oleh host debug (misalnya: analisis RTTI, pemeriksaan bentuk tabel fungsi virtual, dll...)
Sintaks
HRESULT CastToPreferredRuntimeType(
IModelObject *contextObject,
_COM_Errorptr_ IModelObject **object
);
Parameter
contextObject
Objek instans yang ditik secara statis (penunjuk ini) untuk melakukan analisis dan mencoba untuk menurunkan ke jenis runtime.
object
Jika konversi ke jenis runtime terjadi, ini adalah instans baru yang ditik sesuai dengan jenis runtime. Jika analisis tidak dapat dilakukan atau tidak ada perubahan jenis, ini mungkin objek asli.
Nilai kembali
Metode ini mengembalikan HRESULT yang menunjukkan keberhasilan atau kegagalan.
Keterangan
Contoh Implementasi:
IFACEMETHOD(CastToPreferredRuntimeType)(_In_ IModelObject *pContextObject,
_COM_Outptr_ IModelObject **ppRuntimeObject)
{
HRESULT hr = S_OK;
*ppRuntimeObject = nullptr;
ComPtr<IModelObject> spRuntimeObject;
// Imagine this was on a class for a data model registered against some
// IFoo type where IFoo was always backed by CFoo (the type of which is
// stored in m_spType) and the offset between IFoo and CFoo was m_runtimeOffset.
Location loc;
hr = pContextObject->GetLocation(&loc);
if (SUCCEEDED(hr))
{
loc.Offset -= m_runtimeOffset;
// By passing 'nullptr' as the context, it will inherit its context
// from the passed type. Sufficient for *THIS* purpose in *MOST* cases.
hr = GetManager()->CreateTypedObject(nullptr,
loc,
m_spType.Get(),
&spRuntimeObject);
}
if (SUCCEEDED(hr))
{
*ppRuntimeObject = spRuntimeObject.Detach();
}
return hr;
}
Persyaratan
Persyaratan | Nilai |
---|---|
Header | dbgmodel.h |