是否有人将VSTA 2.0加载项开发升级到VSTA 2012?如果是的话,
请您帮我解决这个问题"如何将我的COM主机对象暴露给VSTA加载项?"
我正在使用VSTA 2012,VSTA 2012附带的示例应用程序" MyVSTAHost"不包括将主机对象暴露给vsta加载项。
在vsta 2.0中,shapeappadvancedmfc涵盖了这一点,但我不再能够在vsta 2012中使用hostitemprovider和contract概念,因为它在vsta 2012中不再受支持。
注意:在VSTA 2.0中,我能够使用加载项调用我的宿主应用程序dispinterface方法但是在VSTA 2012中知道如何做,我没有看到VSTA 2012中的poxygen和一些运行时命名空间的支持VSTA 2012不再支持。
谢谢和问候,
Nayaz
答案 0 :(得分:-1)
使用Visual Studio包模板:
非托管VSPackage(包括由Visual Studio包模板生成的版本)使用ATL样式的.rgs文件来存储注册信息。 .rgs文件格式特定于ATL,通常不能由安装创作工具按原样使用。必须单独维护VSPackage安装程序的注册信息。例如,开发人员可以将.reg格式的文件与.rgs文件更改同步。 .reg文件可以与RegEdit合并以进行开发工作或由安装程序使用。
有时,COM接口会生成一个IUnknown对象,然后COM接口将其作为void **类型传递。这些接口尤为重要,因为如果在IDL中将变量定义为[out],则使用AddRef方法对IUnknown对象进行引用计数。如果未正确处理对象,则会发生内存泄漏。
由COM接口创建并在[out]变量中返回的IUnknown对象如果未明确释放则会导致内存泄漏。
处理此类对象的托管方法应将IntPtr视为指向IUnknown对象的指针,并调用GetObjectForIUnknown方法以获取该对象。然后调用者应该将返回值强制转换为适当的任何类型。当不再需要该对象时,请调用Release以释放它。
在Visual Studio 2015中,它们已经消失(没有“工具”>“加载项管理器”菜单)。因此,您必须将加载项迁移到程序包,这可能是一项非常艰巨的任务,具体取决于加载项的大小和复杂性(仅通过您仍然可以使用自动化模型(EnvDTE)的事实来缓解包裹。
<强>参考强>
Walkthrough: Creating a Menu Command By Using the Visual Studio Package Template
Implementing Enumeration Inheritance using Roslyn based VS Extension
Developing a Visual Studio 2012 Team Explorer Extension for Search and Replace in Work Items
Walkthrough: Exploring COM Interoperability with ATL and Managed Extensions for C++