Rejestrowanie niestandardowego aparatu debugowania
Aparat debugowania musi zarejestrować się jako fabrykę klas, postępując zgodnie z konwencjami COM, a także zarejestrować się w programie Visual Studio za pomocą podklucza rejestru programu Visual Studio.
Uwaga
Przykład rejestrowania aparatu debugowania można znaleźć w przykładzie TextInterpreter, który jest kompilowany w ramach samouczka: kompilowanie aparatu debugowania przy użyciu modelu ATL COM.
Proces serwera DLL
Aparat debugowania jest zwykle konfigurowany we własnej biblioteki DLL jako serwer COM. W związku z tym aparat debugowania musi zarejestrować identyfikator CLSID swojej fabryki klas za pomocą modelu COM, zanim program Visual Studio będzie mógł uzyskać do niego dostęp. Następnie aparat debugowania musi zarejestrować się w programie Visual Studio, aby ustanowić wszelkie właściwości (inaczej znane jako metryki), które obsługuje aparat debugowania. Wybór metryk zapisanych w podkluczu rejestru programu Visual Studio zależy od funkcji, które obsługuje aparat debugowania.
Pomocnicy zestawu SDK do debugowania opisują nie tylko lokalizacje rejestru niezbędne do zarejestrowania aparatu debugowania; opisuje również bibliotekę dbgmetric.lib , która zawiera wiele przydatnych funkcji i deklaracji dla deweloperów języka C++, które ułatwiają manipulowanie rejestrem.
Przykład
W poniższym przykładzie (z przykładu TextInterpreter) pokazano, jak używać SetMetric
funkcji (z pliku dbgmetric.lib), aby zarejestrować aparat debugowania w programie Visual Studio. Przekazywane metryki są również definiowane w pliku dbgmetric.lib.
Uwaga
TextInterpreter to podstawowy aparat debugowania; nie jest on skonfigurowany — i dlatego nie rejestruje — żadnych innych funkcji. Bardziej kompletny aparat debugowania miałby całą listę wywołań SetMetric
lub ich odpowiednik, po jednym dla każdej funkcji obsługiwanej przez aparat debugowania.
// 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);
}