Implementace a registrace dodavatele portů
Role dodavatele portů je sledovat a dodávat porty, které zase spravují procesy. Když je potřeba vytvořit port, vytvoří se instance dodavatele portu pomocí coCreate s identifikátorem GUID dodavatele portu (správce ladění relace [SDM] použije dodavatele portu, kterého uživatel vybral, nebo dodavatele portu určeného systémem projektu). SDM pak zavolá CanAddPort a zjistí, jestli je možné přidat nějaké porty. Pokud je možné přidat port, je požadován nový port voláním AddPort a jeho předáním IDebugPortRequest2 popisující port. AddPort
vrátí nový port reprezentovaný rozhraním IDebugPort2 .
Diskuse
Port je vytvořen dodavatelem portu, který je přidružený k počítači nebo ladicímu serveru. Server vytvoří výčet dodavatelů portů prostřednictvím metody EnumPortSuppliers a dodavatel portu vytvoří výčet svých portů metodou EnumPorts .
Kromě typické registrace modelu COM se dodavatel portů musí zaregistrovat v sadě Visual Studio tak, že umístí jeho CLSID a název do konkrétních umístění registru. Pomocná funkce sady SDK pro ladění s názvem SetMetric
zpracovává tuto činnost: volá se jednou pro každou položku, která se má zaregistrovat, a proto:
SetMetric(metrictypePortSupplier,
<GUID of your port supplier>,
metricCLSID,
<CLSID of your port supplier>,
false,
NULL)
SetMetric(metrictypePortSupplier,
<GUID of your port supplier>,
metricName,
<name of your port supplier>,
false,
NULL);
Dodavatel portu zruší registraci sám voláním RemoveMetric
(další pomocné funkce sady SDK ladění) jednou pro každou zaregistrovanou položku, a proto:
RemoveMetric(metrictypePortSupplier,
<GUID of your port supplier>,
metricCLSID,
NULL);
RemoveMetric(metrictypePortSupplier,
<GUID of your port supplier>,
metricName,
NULL);
Poznámka:
Pomocné rutiny sady SDK pro laděníSetMetric
a RemoveMetric
jsou statické funkce definované v dbgmetric.h a kompilované do ad2de.lib. Objekty metrictypePortSupplier
, metricCLSID
a metricName
pomocné rutiny jsou také definovány v dbgmetric.h.
Dodavatel portu může zadat svůj název a identifikátor GUID prostřednictvím metod GetPortSupplierName a GetPortSupplierId.