Metode IDataModelManager2::RegisterModelForTypeSignature (dbgmodel.h)

Metode RegisterModelForTypeSignature adalah metode utama yang digunakan pemanggil untuk mendaftarkan visualizer kanonis untuk jenis tertentu (atau sekumpulan jenis). Visualizer kanonis adalah model data yang, berlaku, mengambil alih tampilan jenis tertentu (atau sekumpulan jenis). Alih-alih tampilan asli/bahasa dari jenis yang ditampilkan di antarmuka pengguna debugger apa pun, tampilan jenis seperti yang disajikan oleh model data terdaftar ditampilkan (bersama dengan sarana untuk kembali ke tampilan asli/bahasa untuk pengguna yang menginginkannya). Tanda tangan jenis yang diteruskan ke metode ini mungkin cocok dengan beberapa jenis konkret. Jika ada beberapa kecocokan untuk instans jenis tertentu, hanya kecocokan terbaik yang akan dikembalikan. Satu tanda tangan jenis dianggap lebih cocok daripada yang lain jika lebih khusus mengacu pada jenis konkret tertentu. Sebagai contoh:

A) std::pair<*, *>
B) std::pair<int, *>
C) std::pair<int, float>

Jika tiga jenis tanda tangan di atas (A, B, dan C) terdaftar dan diperiksa terhadap jenis beton:

std::pair<int, float>

Tanda tangan alltype cocok dengan instans jenis ini. Yang kedua adalah kecocokan yang lebih baik daripada yang pertama karena int (argumen templat pertama B) adalah kecocokan yang lebih baik daripada kartubebas (argumen templat pertama dari A). Demikian juga, yang ketiga adalah pertandingan yang lebih baik daripada yang kedua (ini adalah pertandingan total tanpa kartubebas). Metode RegisterModelForTypeSignature tidak akan memungkinkan tanda tangan jenis duplikat didaftarkan. Hanya satu model data yang dapat didaftarkan sebagai visualizer kanonis untuk tanda tangan jenis tertentu. Upaya untuk mendaftarkan tanda tangan jenis yang sama dua kali akan gagal. Demikian juga, metode RegisterModelForTypeSignature tidak akan mengizinkan tanda tangan jenis yang secara ambigu dapat mencocokkan instans jenis apa pun untuk didaftarkan. Sebagai contoh:

D) std::pair<int, *>
E) std::pair<*, int>

Dua jenis tanda tangan di atas (D dan E) tidak dapat didaftarkan. Untuk beberapa jenis, jelas tanda tangan mana yang berlaku dan yang terbaik. Contohnya,

std::pair<int, float>

Hanya cocok dengan yang pertama (D) karena float dan int tidak cocok. Namun, itu benar-benar ambigu ketika mempertimbangkan hal-hal berikut:

std::pair<int, int>

Salah satu tanda tangan ini sama baiknya (keduanya memiliki satu konkret dan satu kecocokan kartubebas). Jenis tanda tangan ini ambigu. Oleh karena itu, panggilan untuk mendaftarkan yang kedua akan gagal karena alasan ini.

Sintaks

HRESULT RegisterModelForTypeSignature(
  IDebugHostTypeSignature *typeSignature,
  IModelObject            *dataModel
);

Parameter

typeSignature

Tanda tangan jenis sedang didaftarkan. Setiap objek asli/bahasa dari jenis konkret yang paling cocok dengan tanda tangan jenis ini akan memiliki model data yang diberikan oleh argumen dataModel yang secara otomatis dilampirkan.

dataModel

Model data yang akan menjadi visualizer kanonis untuk jenis yang cocok dengan tanda tangan jenis yang diberikan.

Nilai kembali

Metode ini mengembalikan HRESULT yang menunjukkan keberhasilan atau kegagalan. Metode ini akan gagal mendaftarkan tanda tangan jenis yang identik atau ambigu.

Keterangan

Kode Sampel

ComPtr<IDataModelManager2> spManager; /* get the data model manager */
ComPtr<IDebugHost> spHost;           /* get the debug host */

ComPtr<IModelObject> spDataModel;    /* create a data model (see 
                                        CreateDataModelObject) */

ComPtr<IDebugHostSymbols> spSym;
if (SUCCEEDED(spHost.As(&spSym)))
{
    // Create a signature to match MyType<*>
    ComPtr<IDebugHostTypeSignature> spTypeSignature;
    if (SUCCEEDED(spSym->CreateTypeSignature(L"MyType<*>", 
                                             nullptr, 
                                             &spTypeSignature)))
    {
        // Register the model for std::vector<*>
        if (SUCCEEDED(spManager->RegisterModelForTypeSignature(spTypeSignature.Get(),
                                                               spDataModel.Get()))
        {
            // Every instance matching MyType<*> will now have spDataModel 
            // attached as the parent.  Further, such parent is considered 
            // the canonical visualizer for all types matching MyType<*> since 
            // it was registered via RegisterModelForTypeSignature instead of
            // RegisterExtensionForTypeSignature.
        }
    }
}

Persyaratan

Persyaratan Nilai
Header dbgmodel.h

Lihat juga

Antarmuka IDataModelManager2