如何初始化 C++ Visual Studio VSPackage?

How to initialize a C++ Visual Studio VSPackage?

我正在将 Visual Studio C++ 命令行加载项转换为 VSPackage。标准 C# VSPackages 支持 initialize() 方法,但 C++ VSPackage 模板不支持。我的 VSPackage 没有任何 UI 元素。我正在寻找与加载项中的 OnConnection() 方法等效的方法(主要是为了连接到 SolutionEventSink)

我的 VSPackage 已经自动加载,但我如何初始化我的 C++ VSPackage?

所有包都实现了 IVsPackage 接口。托管包项目(C# 和 VB.Net)abstracts/hides 实际接口实现,由 Microsoft.VisualStudio.Shell.Package class 提供,它为您提供了从中调用的 Initialize() 方法底层 IVsPackage.SetSite 实现。

对于 C++ 包,IVsPackage::SetSite 实际上是通过您通过 IVsPackageImpl 继承的 VsSiteBaseImpl 模板实现的。查看 SetSite 实现,我发现了这个小代码块:

__if_exists(DerivedClass_T::PostSited)
{
    static_cast<DerivedClass_T*>(this)->PostSited(result);
}

基本上就是说,如果您的包 class 实现了 PostSited,那么请在此处调用它。所以看起来这里的答案是用你的 VSL/C++ 包 class 实现一个 PostSited 方法,以获得一个类似于托管 Package.Initialize 方法的方法。

干杯,