次の方法で共有


IDebugHostType2::IsTypedef メソッド (dbgmodel.h)

IsTypedef メソッドは、型が typedef であるかどうかを確認できる唯一のメソッドです。 GetTypeKind メソッドは、基になる型で呼び出されたかのように動作します。

構文

HRESULT IsTypedef(
  bool *isTypedef
);

パラメーター

isTypedef

型シンボルが typedef の場合は true、そうでない場合は false を返します。

戻り値

このメソッドは HRESULT を返します。

注釈

サンプル コード

ComPtr<IDebugHostType> spType; /* get a type for a typedef (only FindTypeByName 
                                  since the compiler usually only emits base types 
                                  in the symbols for data) */

ComPtr<IDebugHostType2> spType2;
if (SUCCEEDED(spType.As(&spType2)))
{
    bool isTypeDef;
    if (SUCCEEDED(spType2->IsTypedef(&isTypeDef)))
    {
        // isTypeDef indicates whether the type is a typedef.
    }
}

typedef である型は、型が typedef の基になる最終的な型であるかのように動作します。 つまり、GetTypeKind などのメソッドは、型が typedef であることを示しません。 同様に、GetBaseType は定義が参照する型を返しません。 代わりに、typedef の基になる最終的な定義で呼び出されたかのように動作することを示します。 例

typedef MYSTRUCT *PMYSTRUCT;
typedef PMYSTRUCT PTRMYSTRUCT;

'PMYSTRUCT または PTRMYSTRUCT の IDebugHostType では、次の情報が報告されます。

  • GetTypeKind メソッドは TypePointer を返します。 最終的な基になる型 MYSTRUCT * は、実際にはポインターです。

  • 'GetBaseType メソッドは MYSTRUCT の型を返します。 MYSTRUCT * の基になる型は MYSTRUCT です。

ここでの唯一の違いは、 IDebugHostType2 の typedef 固有のメソッドの動作です。 それらのメソッドは次のとおりです。

STDMETHOD(IsTypedef)(_Out_ bool* isTypedef) PURE;

STDMETHOD(GetTypedefBaseType)(_Out_ IDebugHostType2** baseType) PURE;

STDMETHOD(GetTypedefFinalBaseType)(_Out_ IDebugHostType2** finalBaseType) PURE;

次の点に注意してください。

  • IsTypedef メソッドは、PMYSTRUCT と PTRMYSTRUCT の両方に対して true を返します
  • GetTypedefBaseType メソッドは、PMYSTRUCT の場合は MYSTRUCT *、PTRMYSTRUCT の場合は PMYSTRUCT を返します。
  • GetTypedefFinalBaseType メソッドは、両方の型の MYSTRUCT * を返します

要件

要件
Header dbgmodel.h

こちらもご覧ください

IDebugHostType2 インターフェイス