次の方法で共有


IDebugHostSymbols::CreateTypeSignatureForModuleRange メソッド (dbgmodel.h)

CreateTypeSignatureForModuleRange メソッドは、モジュールシグネチャと型名によって具象型のセットを照合するために使用できるシグネチャを作成します。 これは CreateTypeSignature メソッドに似ていますが、シグネチャに一致する特定のモジュールを渡す代わりに、呼び出し元はモジュールシグネチャを作成するために必要な引数を渡します (モジュールシグネチャが CreateModuleSignature メソッドで作成された場合と同様)。

構文

HRESULT CreateTypeSignatureForModuleRange(
  PCWSTR                  signatureSpecification,
  PCWSTR                  moduleName,
  PCWSTR                  minVersion,
  PCWSTR                  maxVersion,
  IDebugHostTypeSignature **typeSignature
);

パラメーター

signatureSpecification

この署名が適用される型を識別する署名文字列。 この文字列の形式は、デバッグ対象の言語に固有です。 C/C++ の場合、これは NatVis 型の仕様と同じです。 これは、テンプレート引数 (*として指定) にワイルドカードを使用できる型名です。

moduleName

型がシグネチャの一致と見なされるためには、含むモジュールが一致する必要がある名前 (大文字と小文字は区別されません)。

minVersion

シグネチャの一致と見なされる型の包含モジュールの最小バージョン。 この引数の形式は、CreateModuleSignature の同じ引数と同じです

maxVersion

シグネチャの一致と見なされる型の包含モジュールの最大バージョン。 この引数の形式は、CreateModuleSignature の同じ引数と同じです

typeSignature

ここで、新しく作成された型シグネチャ オブジェクトが返されます。

戻り値

このメソッドは、成功または失敗を示す HRESULT を返します。

注釈

サンプル コード

ComPtr<IDebugHost> spHost; /* get the host */

ComPtr<IDebugHostSymbols> spSym;
if (SUCCEEDED(spHost.As(&spSym)))
{
    ComPtr<IDebugHostTypeSignature> spSig;
    if (SUCCEEDED(spSym->CreateTypeSignatureForModuleRange(
        L"MyTemplateType<*>", 
        L"MyModule.dll", 
        L"6.3", 
        L"10.0.0.0", 
        &spSig)))
    {
        // spSig is a type signature which will match any template type with 
        // a base name of MyTemplateType and *ANY* template arguments that is 
        // within a module named "MyModule.dll" with a version >= 6.3(.0.0) 
        // and a version <= 10.0.0.0 (regardless of the process/context of the module)
        //
        // Note that the version arguments are optional.  If absent, it indicates 
        // there is either no lower or no upper bound on the module version 
        // to match the signature.
    }
}

FindModuleByName、CreateTypeSignature、CreateTypeSignatureForModuleRange でのシンボル モジュールの一致の違い

FindModuleByName を使用すると、渡されたモジュール名を、モジュールの実際のイメージ名 (例: My Module.dll) またはデバッガー エンジンで参照できる名前 (たとえば、MyModule や MyModule_<hex_base>) にすることができます。

CreateTypeSignatureForModuleRange を呼び出し、name/nullptr/nullptr を渡すと、任意のバージョンのその名前に一致するモジュールと一致するシグネチャが作成されます。

CreateTypeSignature 関数に渡されるモジュール名は、モジュールの実際のイメージ名 (例: MyModule.dll) のみを受け入れます。

FindModuleByName を呼び出し、そのモジュールで CreateTypeSignature を呼び出すと、渡されたモジュールの特定のインスタンスにのみ一致する署名が作成されます。 読み込まれるモジュールのコピーが 2 つある場合 (たとえば、64 ビット Windows で実行されている 32 ビット プロセスの ntdll) は、渡された特定のインスタンスにのみ一致します。 また、その DLL がアンロードされ、再読み込みされた場合も一致しなくなります。 シグネチャは、デバッガーによって知られているモジュールの特定のインスタンスに関連付けられます。

要件

要件
Header dbgmodel.h

こちらもご覧ください

IDebugHostSymbols インターフェイス

FindModuleByName

CreateTypeSignature