IVsPackageImpl 类在 Visual Studio 库中提供 IVsPackage 接口的一个最小实现。 IVsPackageImpl 负责大多数 IVsPackage维护方法。 可能需要重写提供了一个有意义的实现的其他方法包括:
-
备注
Visual Studio 包模板生成讨论的所有代码示。可以节省时间使用模板生成您的 VSPackage。
通常实现使用 Visual Studio 库的包继承 ATL 的 CComObjectRootEx Class 和 CComCoClass Class 和 Visual Studio 库的 IVsPackageImpl 的 VSPackage 类。 例如,下面是从 Reference.Package 示例的 VSPackage 类声明:
class ATL_NO_VTABLE BasicPackage :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<BasicPackage, &CLSID_BasicPackage>,
public IVsPackageImpl<BasicPackage, &CLSID_BasicPackage>,
...
显示的 IVsPackageImpl 模板参数是一些类和指向标识 VSPackage 的 GUID。
支持与 COM 映射的 QI
获取添加 ATL 支持 QueryInterface支持,其 COM 映射必须列表该类实现的接口。 例如,下面是一些类的 COM 映射。 Reference.Package 示例:
BEGIN_COM_MAP(BasicPackage)
COM_INTERFACE_ENTRY(IVsPackage)
...
END_COM_MAP()
有关 COM 映射的更多信息,请参见 Implementing CComObjectRootEx 和 COM_INTERFACE_ENTRY Macros。
支持使用注册表映射注册
Visual Studio 库使用 ATL 样式 .RGS 文件支持 COM 对象的注册。 若要支持在 .RGS 文件的标记替换, Visual Studio 库使用注册表映射。 注册表映射列出要替换的符号并支持使用字符串表资源的 ID。
例如,下面是一些类的注册表映射。 Reference.Package 示例:
VSL_BEGIN_REGISTRY_MAP(IDR_BASICPACKAGE_RGS)
VSL_REGISTRY_MAP_GUID_ENTRY(CLSID_BasicPackage)
VSL_REGISTRY_RESOURCE_STRING_ENTRY(IDS_BASICPACKAGE_REGISTRY_NAME)
...
VSL_END_REGISTRY_MAP()