Я конвертирую надстройку командной строки Visual Studio C ++ в VSPackage. Стандартные C # VSPackages поддерживают метод initialize (), а шаблон C ++ VSPackage — нет. В моем VSPackage нет элементов интерфейса. Я ищу эквивалент метода OnConnection () в надстройке (прежде всего для подключения к SolutionEventSink)
Мой VSPackage уже загружается автоматически, но как я могу инициализировать мой C ++ VSPackage?
Все пакеты реализуют интерфейс IVsPackage. Проекты управляемых пакетов (C # и VB.Net) абстрагируют / скрывают фактическую реализацию интерфейса, предоставленную классом Microsoft.VisualStudio.Shell.Package, который предоставляет вам метод Initialize (), который вызывается из базовой реализации IVsPackage.SetSite. ,
Для пакета C ++ IVsPackage :: SetSite фактически реализуется через шаблон VsSiteBaseImpl, который вы наследуете через IVsPackageImpl. Глядя на эту реализацию SetSite, я нашел этот маленький кусочек кода:
__if_exists(DerivedClass_T::PostSited)
{
static_cast<DerivedClass_T*>(this)->PostSited(result);
}
Который в основном говорит, что если вы пакет класса реализует PostSited, то вызовите его здесь. Таким образом, кажется, что ответ здесь заключается в том, чтобы реализовать метод PostSited с вашим классом пакета VSL / C ++, чтобы иметь метод, аналогичный управляемому методу Package.Initialize.
Ура,