IDataModelManager2::CreateTypedIntrinsicObject 메서드(dbgmodel.h)
CreateTypedintrinsicObject 메서드는 네이티브/언어 형식을 데이터와 연결하고 boxed 값과 함께 사용할 수 있다는 점을 제외하고 CreateIntrinsicObject 메서드와 유사합니다. 이렇게 하면 데이터 모델이 네이티브 열거형 형식(단순히 VT_UI* 또는 VT_I* 값)과 같은 구문을 나타낼 수 있습니다. 포인터 형식도 이 메서드를 사용하여 만들어집니다. 데이터 모델의 네이티브 포인터는 디버그 대상의 가상 주소 공간에 대한 오프셋을 나타내는 0개의 확장된 64비트 수량입니다. 이 메서드는 VT_UI8 내에 상자로 표시되며 이 메서드와 네이티브/언어 포인터를 나타내는 형식으로 만들어집니다.
구문
HRESULT CreateTypedIntrinsicObject(
VARIANT *intrinsicData,
IDebugHostType *type,
IModelObject **object
);
매개 변수
intrinsicData
IModelObject 컨테이너 내에 boxd될 값을 포함하는 VARIANT입니다. 이 메서드는 VT_UNKNOWN 구문을 지원하지 않습니다. 이 메서드에 전달된 모든 항목은 ObjectIntrinsic으로 표현할 수 있어야 합니다.
type
값의 네이티브/언어 형식입니다.
object
새로 상자가 지정된 값( IModelObject)이 여기에 반환됩니다.
반환 값
이 메서드는 성공 또는 실패를 나타내는 HRESULT를 반환합니다.
설명
예제 코드
ComPtr<IDataModelManager> spManager; /* get the data model manager */
ComPtr<IDebugHostType> spEnumType; /* get an enum type (see CreateTypedObject) */
ComPtr<IDebugHostType> spPtrType; /* get a pointer type (see CreateTypedObject) */
// Box an enum
VARIANT vtEnumValue;
vtEnumValue.vt = VT_I4;
vtEnumValue.lVal = 2;
ComPtr<IModelObject> spEnumValue;
if (SUCCEEDED(spManager->CreateTypedIntrinsicObject(&vtEnumValue,
spEnumType.Get(),
&spEnumValue)))
{
// spEnumValue now contains the value '2' expressed as the enum type
// in spEnumType. The value will still present as 2 and operate as any other int.
// A type query on the object will, however, yield the enum type.
}
// Box a pointer. All pointers are represented as unsigned 64-bit values.
// 32-bit pointers are **ZERO EXTENDED** to 64-bits.
VARIANT vtPtrValue;
vtPtrValue.vt = VT_UI8;
vtPtrValue.ullVal = 0x100; // the pointer address
ComPtr<IModelObject> spPtrValue;
if (SUCCEEDED(spManager->CreateTypedIntrinsicObject(&vtPtrValue, spPtrType.Get(), &spPtrValue)))
{
// spPtrValue now contains a <TYPE (POINTER)>(0x100). You can fetch
// the pointer address through standard means of GetIntrinsicValue(As).
// Dereference() will work on spPtrValue!
}
요구 사항
요구 사항 | 값 |
---|---|
헤더 | dbgmodel.h |