Freigeben über


Registrieren eines benutzerdefinierten Debugmoduls

Die Debug-Engine muss sich selbst als Klassenfabrik registrieren, indem sie den COM-Konventionen folgt und sich auch über den Registrierungsunterschlüssel von Visual Studio bei Visual Studio registrieren.

Hinweis

Sie finden ein Beispiel zum Registrieren eines Debugmoduls im TextInterpreter-Beispiel, das als Teil des Lernprogramms erstellt wird: Erstellen eines Debugmoduls mithilfe von ATL COM.

DLL-Serverprozess

Ein Debugmodul wird in der Regel in einer eigenen DLL als COM-Server eingerichtet. Daher muss die Debug-Engine die CLSID ihrer Klassenfabrik bei COM registrieren, bevor Visual Studio darauf zugreifen kann. Anschließend muss sich das Debugmodul bei Visual Studio registrieren, um alle Eigenschaften (sonst als Metriken bezeichnet) einzurichten, die das Debugmodul unterstützt. Die Auswahl von Metriken, die in den Registrierungsunterschlüssel von Visual Studio geschrieben wurden, hängt von den Features ab, die das Debugmodul unterstützt.

SDK-Hilfsprogramme zum Debuggen beschreiben nicht nur die Registrierungsspeicherorte, die zum Registrieren eines Debugmoduls erforderlich sind. außerdem wird die bibliothek dbgmetric.lib beschrieben, die eine Reihe nützlicher Funktionen und Deklarationen für C++-Entwickler enthält, die das Bearbeiten der Registrierung vereinfachen.

Example

Im folgenden Beispiel (aus dem TextInterpreter-Beispiel) wird gezeigt, wie Die SetMetric Funktion (aus dbgmetric.lib) zum Registrieren eines Debugmoduls mit Visual Studio verwendet wird. Die übergebenen Metriken werden auch in dbgmetric.lib definiert.

Hinweis

TextInterpreter ist ein einfaches Debugmodul; sie richtet keine anderen Features ein und registriert sie daher nicht. Ein vollständiges Debugmodul würde eine vollständige Liste von SetMetric Aufrufen oder deren Entsprechung aufweisen, eine für jedes Feature, das vom Debugmodul unterstützt wird.

// Define base registry subkey to Visual Studio.
static const WCHAR strRegistrationRoot[] = L"Software\\Microsoft\\VisualStudio\\8.0";

HRESULT CTextInterpreterModule::RegisterServer(BOOL bRegTypeLib, const CLSID * pCLSID)
{
    SetMetric(metrictypeEngine, __uuidof(Engine), metricName, L"Text File", false, strRegistrationRoot);
    SetMetric(metrictypeEngine, __uuidof(Engine), metricCLSID, CLSID_Engine, false, strRegistrationRoot);
    SetMetric(metrictypeEngine, __uuidof(Engine), metricProgramProvider, CLSID_MsProgramProvider, false, strRegistrationRoot);

    return base::RegisterServer(bRegTypeLib, pCLSID);
}