IDataModelConcept::InitializeObject 메서드(dbgmodel.h)
데이터 모델은 데이터 모델 관리자의 RegisterModelForTypeSignature 또는 RegisterExtensionForTypeSignature 메서드를 통해 정식 시각화 도우미 또는 지정된 네이티브 형식의 확장으로 등록할 수 있습니다. 이러한 메서드 중 하나를 통해 모델을 등록하면 데이터 모델은 등록에 전달된 서명과 일치하는 형식의 모든 네이티브 개체에 부모 모델로 자동으로 연결됩니다. 해당 첨부 파일이 자동으로 만들어지는 지점에서 데이터 모델에서 InitializeObject 메서드가 호출됩니다. instance 개체, 첨부 파일을 발생시킨 형식 서명 및 형식 서명의 와일드카드와 일치하는 형식 인스턴스(선형 순서)를 생성하는 열거자가 전달됩니다. 데이터 모델 구현은 이 메서드 호출을 사용하여 필요한 모든 캐시를 초기화할 수 있습니다.
구문
HRESULT InitializeObject(
IModelObject *modelObject,
IDebugHostTypeSignature *matchingTypeSignature,
IDebugHostSymbolEnumerator *wildcardMatches
);
매개 변수
modelObject
초기화되는 instance 개체입니다.
matchingTypeSignature
데이터 모델의 첨부 파일을 발생시킨 modelObject의 네이티브 형식이 일치하는 형식 서명입니다.
wildcardMatches
일치하는 형식 서명에 와일드카드가 포함된 경우 이 인수에는 각 와일드카드의 일치 방식을 열거하는 열거자가 포함됩니다. 일반적으로 여기에 열거된 각 IDebugHostSymbol 은 IDebugHostType입니다. 즉, 아니, 그러나 요구 사항입니다. 형식이 아닌 템플릿 인수(무엇보다도)는 와일드카드와 일치할 수 있으며 IDebugHostConstant와 같은 기호를 생성할 수 있습니다.
반환 값
이 메서드는 성공 또는 실패를 나타내는 HRESULT를 반환합니다. 이 메서드를 실패하면 instance 개체가 생성되지 않습니다.
설명
지정된 데이터 모델 구현에서는 데이터 모델이 연결된 모든 개체에 대해 InitializeObject 호출이 이루어진다고 가정할 수 없습니다. 데이터 모델은 완전히 동적 시스템이므로 호출자가 IModelObject의 GetParentModel 메서드를 통해 모델을 직접 획득하고 수동으로 연결할 수 있습니다. 이러한 상황에서는 InitializeObject 호출이 수행되지 않으며 구현을 준비해야 합니다. 이 메서드의 호출은 비용이 많이 드는 구현이 필수 캐시를 미리 채우고 미리 초기화할 수 있도록 하는 최적화입니다.
구현 예제
클라이언트는 이 인터페이스를 호출하지 않습니다.
//
// InitializeObject is an implementation of the interface method on some
// class representing a data model. Consider that the class has a GetObject() method
// which returns the IModelObject for the data model
//
// Let's also imagine that this registered for the type signature "std::vector<*>"
//
IFACEMETHOD(InitializeObject)(_In_ IModelObject *pContextObject, _In_ IDebugHostTypeSignature *pTypeSignature, _In_ IDebugHostSymbolEnumerator *pWildcardMatches)
{
HRESULT hr = S_OK;
// The minimal implementation is "return S_OK;"
// Typically, this is used to fill cache information. Imagine we have a
// cache in the context data.
ComPtr<IUnknown> spCtxData;
hr = pContextObject->GetContextForDataModel(GetObject(), &spCtxData));
if (SUCCEEDED(hr))
{
CacheData *pCacheData = static_cast<CacheData *>(spCtxData.Get());
// Find the instance type. This is the template argument(s) which
// matched the * in 'std::vector<*>'
ComPtr<IDebugHostSymbol> spFirstMatch;
hr = pWildcardMatches->GetNext(&spFirstMatch));
if (SUCCEEDED(hr))
{
SymnbolKind sk;
ComPtr<IDebugHostType> spFirstType;
if (SUCCEEDED(hr = spFirstMatch->GetSymbolKind(&sk)) && sk == SymbolType &&
SUCCEEDED(hr = spFirstMatch.As(&spFirstType))))
{
pCacheData->SetInstanceType(spFirstType.Get()));
}
}
}
return hr;
}
요구 사항
요구 사항 | 값 |
---|---|
헤더 | dbgmodel.h |