Microsoft的Visual Studio开发工具为软件开发人员提供了强大的功能,通过集成开发环境(IDE)的构建平台提供的菜单和工具条,开发人员可以生成项目,编写代码,调试直到最终生成应用程序。除此之外,Visual Studio还提供了一套完整的自动化对象,通过操作这些自动化对象提供的方法,开发人员在不使用菜单和工具条的情况下也能够完成诸如打开文件、激活窗口或改变窗口大小等操作。Visual Studio提供了两种方法让用户控制集成开发环境和它的自动化组件对象,一种是使用宏(Macros),另一种是使用内置插件(Add-ins)。本文主要是介绍内置插件(Add-ins)方面的内容。
每一个自动化对象都代表了集成开发环境的一个构件或相关的一组构件。例如Document代表一个打开的文档,而Documents对象则代表所有打开的文档,同样,一个Window对象代表一个打开的窗口,Windows对象代表所有打开的窗口。使用内置插件可以在脱离IDE的情况下打开一个项目。修改项目中的文件甚至重新Build这个项目。使用内置插件还可以向IDE添加实用的命令,在工具条上创建按钮,扩展IDE的功能。
IDSAddIn接口是Visual Studio定义的插件接口,Visual Studio只是定义了这个接口,一个内置插件就是一个IDSAddIn接口的实现,也就是说,一个内置插件就是一个COM对象,它至少应该实现一个IDSAddIn接口。使用VC的Add-ins向导生成的内置插件代码核心就是一个CDSAddIn类:
class CDSAddIn : public IDSAddIn,
public CComObjectRoot,public CComCoClass<CDSAddIn, &CLSID_DSAddIn<
IDSAddIn接口其实只有两个方法,分别是:
IDSAddIn::OnConnection 插件被装载
IDSAddIn::OnDisconnection 插件被卸载
插件工作的过程是这样的,当IDE启动一个插件时,就按照IDSAddIn接口的约定调用插件的coclass实现的OnConnection,并传递一个Application参数给插件,插件的OnConnection就完成插件的初始化。并通过这个Application对象查询IDE支持的其他自动化对象,通过这些对象完成特定的任务。一个内置插件典型的任务就是向系统的Commands对象注册一个命令并在工具条上创建一个按钮。当系统要卸载一个内置插件时就会调用相应的OnDisconnection,插件应该利用这个机会释放已经申请的系统资源,从系统的Commands对象中注销已经注册的命令,同时删除添加在工具条上的按钮。从这个过程可以看出,虽然插件的加载和释放都是被动进行的,但是通过实现自定义的OnConnection和OnDisconnection接口函数,插件可以完成自己定制的初始化和销毁任务,这很像是COM事件的回调过程,从接口函数的名字也可以看出一些倪端,接口函数的名字都是以“On”开头,这通常是COM体系中事件接口的声明方式。图(1) 表示了内置插件、IDSAddIn接口和实现类之间的关系:
图1. 插件组件、IDSAddIn接口和实现类之间的关系
Visual Studio的IDE通过IDSAddIn::OnConnection接口函数将一个很重要的参数传递给插件,这个参数就是一个Application对象。Application对象对应的是整个Visual Studio IDE 的实例,简单点讲,可以理解为一个Application就是一个打开的VC集成开发环境。Application对象是整个Visual Studio内置组件的核心组件,通过Application对象可以查询整个Visual Studio IDE的所有内置对象,并通过这些内置对象控制Visual Studio。以下代码演示了在不打开VC的IDE的情况下打开一个VC的工作区并执行Rebuild All命令编译这个工作区的所有项目:
//伪代码,不可直接编译
#import "..../devshl.dll"
IApplicationPtr pApp;
pApp.CreateObject(_T("MSDEV.Application"));
if(pApp != NULL)
{
pApp-<RebuildAll();
}
内置插件通过IDSAddIn::OnConnection接口函数接口函数获得一个当前集成开发环境的Application对象,插件随后的所有工作都是围绕着这个Application对象进行的,CDSAddIn负责保存这个Application对象。Visual Studio的内置COM对象接口是一个比较复杂的接口模型,图(2)就是这些内置接口的关系图:
图2. Visual Studio的内置COM对象接口关系图
下面就以TabBars的自动添加格式化函数说明功能的部分代码为例,演示如何通过Application对象实现在当前文档中插入文字内容:
CComPtr<IDispatch< pDispDoc;
CComQIPtr<ITextDocument, &IID_ITextDocument< pDoc;
//m_pApplication是CDSAddIn保存的一个Application对象
m_pApplication-<get_ActiveDocument(&pDispDoc);
pDoc = pDispDoc; //隐式的接口查询
pDispDoc = NULL; //Release it
if(pDoc)
{
CComPtr<IDispatch< pDispSel;
CComQIPtr<ITextSelection, &IID_ITextSelection< pSel;
CComBSTR bstr;
CString strText;
pDoc-<get_Selection(&pDispSel);
pSel = pDispSel; // 查询ITextSelection对象
pDispSel = NULL;
hr = pSel-<get_Text(&bstr); //得到当前选择的文字
if(SUCCEEDED(hr))
{
strText = bstr;
strText.Replace(_T("/t"),_T(" ")); //将/t替换成空格
bstr = strText;
pSel-<put_Text(bstr);//写入document
}
}
了解了Visual Studio的自动化接口以及如何使用这些接口之后,就可以大致了解TabBars是如何工作的,随后的代码解读将重点介绍每个TabBars的功能是如何实现的,并结合这些功能讲解Visual Studio内置COM对象接口的用法。
分享到:
相关推荐
在本项目中,"作业保存记录——visual studio关于视频采集编码RTP发送的大作业c++",我们将探讨一系列与计算机视觉、视频处理和网络通信相关的技术。这个大作业主要涉及了以下几个关键知识点: 1. **视频采集**:...
VisualStudio自动编码插件 自动编码是一个强大的附加的Visual Studio。NET,它可以自动调用参数化的命令来生成代码重复的编码任务,重构,执行IDE操作或任何用户定义的命令。智能感知! 快速命令调用,只需按Ctrl...
为了提升开发效率和代码质量,Visual Studio支持多种插件,其中“Visual Assist X”是广受欢迎的代码补全和增强工具之一。 Visual Assist X是由Whole Tomato Software开发的一款插件,它为Visual Studio提供了丰富...
【LINQ体验(1)——Visual Studio 2008新特性】 LINQ(Language Integrated Query,语言集成查询)是Microsoft在.NET Framework 3.5中引入的一项重要特性,主要针对C# 3.0和VB.NET语言。它将查询表达式内建于语言之...
本篇文章将详细探讨“Visual Studio代码自动注释插件”这一主题,特别关注C#和JavaScript类、方法注释的生成。 首先,让我们了解为何需要代码注释。代码注释可以提供代码逻辑的解释,特别是在复杂的项目中,它能够...
代码注释对齐Visual Studio AddIn旨在自动化这个过程,确保无论何时添加、修改或删除注释,它们都能自动对齐,保持一致性。 AddIn的工作原理可能包括以下几点: 1. **扫描与分析**:AddIn会实时监控用户在编辑器中...
VisualStudio自动编码插件 自动编码是一个强大的附加的Visual Studio。NET,它可以自动调用参数化的命令来生成代码重复的编码任务,重构,执行IDE操作或任何用户定义的命令。智能感知! 快速命令调用,只需按Ctrl +...
代码编辑器是 Visual Studio 的核心组件,提供了语法高亮、代码完成、代码重构等功能。项目和解决方案是 Visual Studio 的基本组织单位,项目是应用程序的基本单元,而解决方案是多个项目的集合。 高级功能 Visual...
标题提到的"Shader高亮代码补全Visual Studio插件"是为了提升Shader编程体验而设计的工具。这类插件通常具备以下功能: 1. **代码高亮**:代码高亮可以增强代码的可读性,通过不同的颜色对关键字、变量、函数等进行...
4. **集成开发环境**:与Visual Studio的其他功能无缝集成,如集成版本控制、错误检查、集成终端窗口,以及与Visual Studio的其他扩展的兼容性,让开发者在一个统一的环境中完成整个开发流程。 5. **性能优化**:...
在Visual Studio这款强大的集成开发环境中,自动添加注释的功能极大地提高了程序员的工作效率,尤其是在编写或维护代码时。这个特性使得开发者能够快速地为代码添加清晰的文档,方便团队协作和后期维护。以下将详细...
【Gitee.VisualStudio.vsix Gitee vs插件(Gitee Extension for Visual Studio)】是专为Visual Studio集成开发环境设计的一款扩展插件,旨在帮助开发者更便捷地与Gitee(中国的Git托管平台)进行交互。这款插件使得...
关于visual studio 版本的{代码片段管理工具}
《数字图像处理与机器视觉——Visual C++与Matlab实现源代码》这本书是关于计算机视觉领域的一个重要资源,它提供了实际编程实现的示例,帮助读者深入理解和应用图像处理和机器视觉理论。这本书的主要目标是将理论...
《Visual Studio C# 通用代码高亮插件详解与安装指南》 在编程世界中,良好的代码可读性是至关重要的。Visual Studio作为Microsoft推出的强大集成开发环境(IDE),为开发者提供了丰富的工具和功能。然而,尽管...
安装完成后,Visual Studio会自动识别并集成这个插件,无需额外配置。 插件的使用过程中,开发者会发现它能根据上下文提供精准的函数签名提示,这对于记忆复杂的库函数或自定义函数的参数列表特别有帮助。同时,它...
数据结构算法——Visual.C.6.0程序集].侯识忠.清晰。 节省硬盘资源,放在这里留用。
《Cpp程序设计教程_基于Visual Studio 2008》是由刘冰、张林和蒋贵全三位专家共同编著的一本深入浅出的C++编程教程,特别针对使用Microsoft Visual Studio 2008这一集成开发环境进行编程的教学与实践。这本书详细...
《Visual Studio Tools for Unity——高效开发游戏的利器》 Unity引擎是全球范围内广泛使用的跨平台游戏开发工具,而Visual Studio Tools for Unity(VSTU)则是微软为Unity开发者量身定制的一款集成开发环境(IDE...
微软意识到了这个问题,为此提供了一个专门的工具——Visual Studio Installer Removal Tool,用于帮助用户干净、彻底地卸载Visual Studio实例。这个工具能够识别并移除Visual Studio安装留下的所有痕迹,包括注册表...