共用方式為


IPreferredRuntimeTypeConcept::CastToPreferredRuntimeType 方法 (dbgmodel.h)

每當用戶端想要嘗試從靜態類型實例轉換成該實例的運行時間類型時,就會呼叫 CastToPreferredRuntimeType 方法。 如果有問題的 對象支援慣用的運行時間類型概念(透過其中一個附加的父模型),則會呼叫這個方法來執行轉換。 這個方法可能會傳回原始物件(沒有轉換或無法分析)、傳回運行時間類型的新實例、因非語意原因而失敗(例如:記憶體不足),或傳回E_NOT_SET。 E_NOT_SET錯誤碼是一個非常特殊的錯誤碼,會向數據模型指出實作不想覆寫預設行為,而且數據模型應該回復到偵錯主機所執行的任何分析(例如:RTTI 分析、虛擬函式數據表的形狀檢查。 etc...)

語法

HRESULT CastToPreferredRuntimeType(
  IModelObject                *contextObject,
  _COM_Errorptr_ IModelObject **object
);

參數

contextObject

靜態型別實例對象(這個指標),用來執行分析和嘗試向下轉型至運行時間類型。

object

如果已轉換至運行時間類型,這是根據運行時間類型輸入的新實例。 如果無法執行分析,或類型沒有變更,這可能是原始物件。

傳回值

此方法會傳回表示成功或失敗的 HRESULT。

言論

範例實作:

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

要求

要求 價值
標頭 dbgmodel.h

另請參閱

IPreferredRuntimeTypeConcept 介面