Método IDataModelManager4::CreateTypedIntrinsicObject (dbgmodel.h)
O método CreateTypedintrinsicObject é semelhante ao método CreateIntrinsicObject, exceto por permitir que um tipo nativo/idioma seja associado aos dados e levado junto com o valor em caixa. Isso permite que o modelo de dados represente constructos como tipos de enumeração nativos (que são simplesmente valores VT_UI* ou VT_I*). Tipos de ponteiro também são criados com esse método. Um ponteiro nativo no modelo de dados é uma quantidade de 64 bits estendida zero que representa um deslocamento para o espaço de endereço virtual do destino de depuração. Ele está em caixa dentro de um VT_UI8 e é criado com esse método e um tipo que indica um ponteiro nativo/idioma.
Sintaxe
HRESULT CreateTypedIntrinsicObject(
VARIANT *intrinsicData,
IDebugHostType *type,
IModelObject **object
);
Parâmetros
intrinsicData
Uma VARIANT que contém o valor que será colocado em caixa dentro de um contêiner IModelObject. Observe que esse método não dá suporte a constructos de VT_UNKNOWN. Qualquer coisa passada para esse método deve ser expressável como ObjectIntrinsic
type
O tipo nativo/idioma do valor.
object
O valor de caixa recente (como um IModelObject) será retornado aqui.
Valor de retorno
Esse método retorna HRESULT que indica êxito ou falha.
Observações
de código de exemplo
ComPtr<IDataModelManager4> 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!
}
Requisitos
Requisito | Valor |
---|---|
cabeçalho | dbgmodel.h |