今天要谈的话题是COM,稍微深入一点,不知道大家用过C++(www.cppentry.com)Test或者Visual Assistant(可到VC知识库工具栏目下载)之类的软件没有,它们都有个非常引 人注目的功能,那就是把它们自身嵌入到VC开发环境中去。这个功能让我痴迷不 已,原因只有一个:我想做一个可以嵌入VC开发环境的VC工程解析器(VC/Delphi 工程解析器已被收录在VC知识库在线杂志第19期中),这样用户在VC开发环境中 就可以直接对当前或所有工程进行各种分析,统计。那么实现它简单吗?简单, Next和Copy即可轻松完成;仅仅这些吗?不是,它的背后还有博大精深的COM做 支撑。不管困难与否,还是让我们先试为快。 二、效果图
三、实现步骤:
<3.1>新建一个<DevStudio Add- in Wizard>类型工程,输入工程名称 "CodeAnalyser".
<3.2>进入第二个画面,系统 要求用户输入插件的名称和描述信息。并且要求用户选择
是否需要生成 工具栏以及是否自动添加VC事件响应代码。
今天要谈的话题是COM,稍微深入一点,不知道大家用过C++(www.cppentry.com)Test或者Visual Assistant(可到VC知识库工具栏目下载)之类的软件没有,它们都有个非常引 人注目的功能,那就是把它们自身嵌入到VC开发环境中去。这个功能让我痴迷不 已,原因只有一个:我想做一个可以嵌入VC开发环境的VC工程解析器(VC/Delphi 工程解析器已被收录在VC知识库在线杂志第19期中),这样用户在VC开发环境中 就可以直接对当前或所有工程进行各种分析,统计。那么实现它简单吗?简单, Next和Copy即可轻松完成;仅仅这些吗?不是,它的背后还有博大精深的COM做 支撑。不管困难与否,还是让我们先试为快。
二、效果图
三、实现步骤:
<3.1>新建一个<DevStudio Add- in Wizard>类型工程,输入工程名称 "CodeAnalyser".
<3.2>进入第二个画面,系统 要求用户输入插件的名称和描述信息。并且要求用户选择
是否需要生成 工具栏以及是否自动添加VC事件响应代码。
<3.3>点击"Finish"结束向导,进入代码编辑窗口。
在这里我们要说的一点是:该工程引用了ICommands接口,并从该接口上 派生出 CCommands类。该类完成了所有用户自定义函数接口,VC应用程序消息响 应和VC调试动作的消息响应工作。当我们真正为CCommands类添加成员函数之前 我们必须先为ICommands接口添加相应的函数接口声明。在本工程中我总共为 ICommands接口添加了两个函数接口,它们名字分别为: GetCurDirCommandMethod和QuitCommandMethod声明如下:(在CodeAnalyer.odl 文件中)
interface ICommands : IDispatch
{
// methods
[id(1)] //在Vtable中的函数索引号
HRESULT GetCurDirCommandMethod(); //得到VC当前工作目录
[id(2)] // 在Vtable中的函数索引号
HRESULT QuitCommandMethod (); // 退出VC编辑器
};