藉由使用 Visual Studio 程式庫實作 VSPackages
IVsPackageImpl Visual Studio 的媒體櫃中的類別會提供最少實作的IVsPackage介面。 IVsPackageImpl大部分的維護方法會處理IVsPackage。 您可能需要提供有意義的實作會覆寫其他方法包括:
-
注意事項
Visual Studio封裝範本會產生此處所討論的所有程式碼。您可以使用範本來為您產生的 VSPackage,以節省時間。
使用 Visual Studio 程式庫通常會實作的封裝會將 VSPackage 類別繼承 ATL 的CComObjectRootEx Class和CComCoClass Class和 Visual Studio 程式庫的 IVsPackageImpl。 例如,以下是從 Reference.Package 範例的 VSPackage 類別宣告:
class ATL_NO_VTABLE BasicPackage :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<BasicPackage, &CLSID_BasicPackage>,
public IVsPackageImpl<BasicPackage, &CLSID_BasicPackage>,
...
IVsPackageImpl VSPackage 類別本身,並找出 VSPackage 的 GUID 的指標,會顯示的樣板參數。
支援與 COM 對應的 QueryInterface
若要取得 ATL 的支援QueryInterface,它的 COM 對應必須列出類別會實作的介面。 比方說下, 面是 Reference.Package 範例中的 VSPackage 類別的 COM 對應:
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 範例中的 VSPackage 類別的登錄對應:
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()