共用方式為


IPreferredRuntimeTypeConcept::CastToPreferredRuntimeType 方法 (dbgmodel.h)

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

語法

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 介面