1

Does anybody upgraded VSTA 2.0 Add-in development to VSTA 2012? if Yes,

Could you please help me on this subject "How do I expose my COM host object to the VSTA add-in?"

i am working with VSTA 2012, The sample application which comes with VSTA 2012 "MyVSTAHost" doesn't cover exposing host object to vsta add-in.

where as in vsta 2.0 shapeappadvancedmfc covers this, but i no longer able to use hostitemprovider and contract concept in vsta 2012 as it is no longer supported in vsta 2012.

note: In VSTA 2.0 i am able to invoke my host application dispinterface methods with the add-in but do know how to do it in VSTA 2012, i dont see the support of poxygen in VSTA 2012 and some of the runtime namespaces are no longer supported in VSTA 2012.

Thanks and regards,

Nayaz

4

1 回答 1

-1

使用 Visual Studio 包模板:

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

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

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

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

在 Visual Studio 2015 中,它们消失了(没有“工具”>“加载项管理器”菜单)。因此,您必须将加载项迁移到一个包中,这可能是一项非常艰巨的任务,具体取决于加载项的大小和复杂性(仅通过您仍然可以使用自动化模型 (EnvDTE)一袋。

参考

于 2014-08-21T20:27:20.957 回答