Método IDataModelManager::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 transportado 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*). Os 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 é empacotado 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á boxado dentro de um contêiner IModelObject . Observe que esse método não dá suporte a constructos 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 recém-boxizado (como um IModelObject) será retornado aqui.
Retornar valor
Esse método retorna HRESULT que indica êxito ou falha.
Comentários
Código de exemplo
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!
}
Requisitos
Requisito | Valor |
---|---|
Cabeçalho | dbgmodel.h |