实现和注册端口提供程序

端口提供程序的作用是跟踪和提供端口,进而管理流程。 当需要创建端口时,使用带有端口提供程序 GUID 的 CoCreate 实例化端口提供程序(会话调试管理器 [SDM] 将使用用户选择的端口提供程序或项目系统指定的端口提供程序)。 然后,SDM 调用 CanAddPort,以查看是否可以添加任何端口。 如果可以添加端口,则通过调用 AddPort 并向其传递描述端口的 IDebugPortRequest2 来请求新端口。 AddPort 返回由 IDebugPort2 接口表示的新端口。

讨论 (Discussion)

端口由与计算机或调试服务器关联的端口提供程序创建。 服务器通过 EnumPortSuppliers 方法枚举其端口提供程序,端口提供程序通过 EnumPorts 方法枚举其端口。

除了典型的 COM 注册之外,端口提供程序还必须通过将 CLSID 和名称放置在特定的注册表位置来向 Visual Studio 注册自身。 调用 SetMetric 的调试 SDK 帮助程序函数将处理此工作:每个要注册的项目都会调用一次,因此:

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);

端口提供程序通过为每个已注册的项调用 RemoveMetric 一次(另一个调试 SDK 帮助程序函数)来注销自身,因此:

RemoveMetric(metrictypePortSupplier,
             <GUID of your port supplier>,
             metricCLSID,
             NULL);
RemoveMetric(metrictypePortSupplier,
             <GUID of your port supplier>,
             metricName,
             NULL);

注意

用于调试的 SDK 帮助程序SetMetricRemoveMetric 是在 dbgmetric.h 中定义的静态函数,已编译为 ad2de.libmetrictypePortSuppliermetricCLSIDmetricName 帮助程序也在 dbgmetric.h 中定义。

端口供应商可以分别通过 GetPortSupplierNameGetPortSupplierId 等方法提供其名称和 GUID。