我正在将Visual Studio C ++命令行加载项转换为VSPackage。标准C#VSPackages支持initialize()方法,但C ++ VSPackage模板不支持。我的VSPackage没有任何UI元素。我正在寻找外接程序中的OnConnection()方法的等价物(主要是挂钩到SolutionEventSink)
我的VSPackage已经自动加载但是我如何初始化我的C ++ VSPackage?
答案 0 :(得分:0)
所有包都实现了IVsPackage接口。托管包项目(C#和VB.Net)抽象/隐藏实际的接口实现,由Microsoft.VisualStudio.Shell.Package类提供,它为您提供从底层IVsPackage.SetSite实现调用的Initialize()方法
对于C ++包,IVsPackage :: SetSite实际上是通过您通过IVsPackageImpl继承的VsSiteBaseImpl模板实现的。看看那个SetSite实现,我发现了这个小块代码:
__if_exists(DerivedClass_T::PostSited)
{
static_cast<DerivedClass_T*>(this)->PostSited(result);
}
基本上说,如果你的包类实现了PostSited,那么在这里调用它。因此,这里的答案似乎是使用VSL / C ++包类实现PostSited方法,以获得类似于托管Package.Initialize方法的方法。
干杯,