首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何向VSTA外接程序公开我的COM主机对象?

如何向VSTA外接程序公开我的COM主机对象?
EN

Stack Overflow用户
提问于 2014-05-19 12:00:23
回答 1查看 150关注 0票数 1

是否有人将VSTA 2.0插件开发升级到VSTA 2012?如果是,

您能否就“如何向VSTA外接程序公开我的COM主机对象?”这一主题向我提供帮助。

我正在使用VSTA2012,VSTA2012 "MyVSTAHost“附带的示例应用程序不包括将主机对象公开给VSTA插件。

在vsta 2.0中,shapeappadvancedmfc涵盖了这一点,但我不能再在vsta 2012中使用主机模板提供程序和契约概念,因为vsta 2012不再支持它。

注意:在VSTA2.0中,我可以使用插件调用我的主机应用程序调度接口方法,但我知道如何在VSTA2012中这样做,我在VSTA2012中看不到对poxygen的支持,并且VSTA2012中不再支持一些运行时命名空间。

感谢并致以问候

纳亚兹

EN

回答 1

Stack Overflow用户

发布于 2014-08-22 04:27:21

使用Visual Studio程序包模板:

非托管VSPackages (包括由Visual Studio包模板生成的那些文件)使用ATL式.rgs文件来存储注册信息。.rgs文件格式是特定于ATL的,通常不能由安装编写工具按原样使用。必须单独维护VSPackage安装程序的注册信息。例如,开发人员可以使.reg格式的文件与.rgs文件更改保持同步。.reg文件可以与RegEdit合并以进行开发工作,也可以由安装程序使用。

有时,COM接口生成IUnknown对象,然后COM接口将其作为空**类型传递。这些接口特别重要,因为如果在IDL中将变量定义为out,则使用AddRef方法对IUnknown对象进行引用计数。如果没有正确处理对象,就会发生内存泄漏。

如果不显式释放由COM接口创建并在out变量中返回的IUnknown对象,则会导致内存泄漏。

处理此类对象的托管方法应将IntPtr视为指向IUnknown对象的指针,并调用GetObjectForIUnknown方法来获取该对象。然后,调用者应该将返回值转换为任何合适的类型。当不再需要该对象时,调用Release将其释放。

在Visual Studio 2015中它们消失了(没有“Tools”>“Add- In Manager”菜单)。因此,您必须将您的外接程序迁移到包中,这可能是一项相当艰巨的任务,具体取决于您的外接程序的大小和复杂性(只有当您仍然可以使用包中的自动化模型(EnvDTE)时才能得到缓解。

参考

  • Walkthrough: Creating a Menu Command By Using the Visual Studio Package Template

  • Microsoft.VisualStudio.VCCodeModel Namespace

  • Automation Object Model Chart

  • Add-ins officially deprecated in Visual Studio 2013

  • Visual Studio Extensions: from Add-in to VSPackage

  • Implementing VSPackages By Using the Visual Studio Library

  • Converting a Visual Studio macro to a Visual Studio plugin

  • Implementing Enumeration Inheritance using Roslyn based VS Extension

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23729512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档