当前位置:首页 > 工业控制 > 电子设计自动化
[导读]如何编写用于Visual C++ 6.0的Add-In。这是一个有趣的问题,不过总的来说,有关这方面的文档和样例程序仍然比较缺乏(中文的更加罕见)。因此我决定把自己学习过程中的一些心得写出来,和大家共享。 一、有关Visual

如何编写用于Visual C++ 6.0的Add-In。这是一个有趣的问题,不过总的来说,有关这方面的文档和样例程序仍然比较缺乏(中文的更加罕见)。因此我决定把自己学习过程中的一些心得写出来,和大家共享。

一、有关Visual C++ Add-In的常见问题

(1)什么是Visual C++ Add-In?它有什么用途?

总的来说,Visual C++ Add-In就是实现某些特定COM接口的组件对象,它可以嵌入Developer Studio集成开发环境中,并提供一些命令用于实现自动化任务,或者简化程序编写过程等等。

从程序员的角度来讲,一个Visual C++ Add-In基本上就是实现了IDSAddIn接口的COM对象。通过这个接口,Add-in能够掌管Developer Studio环境,并且执行特定的任务。

(2)如何编写Add-In?

最简单的办法是启动Visual C++ AppWizard,并且从项目类型中选择DevStudio Add-in Wizard,如下图。


(3)到哪里去找有关Add-In的编程资料和文档?

最完整的文档在MSDN中,位置是MSDN LibraryVisual Studio DocumentationUsing Visual C++Visual C++ User''s GuideAutomating Tasks in Visual C++Add-ins for Visual C++ Developer Studio。不同版本的MSDN可能在具体路径上有一些小差别。

(4)如何使用Add-In?

如果你获得了一个有用的Add-in,或者自己编写了一个,请按照如下的步骤安装它:

从Visual C++的主菜单中选择Tools | Customize,然后翻到Add-ins and Macro Files页面:


如果你的Add-in没有出现在列表中,则按Browse按钮,找到Add-in文件(注意要将默认的文件类型(*.dsm)改成(*.dll)):


稍候,Add-in将会出现在Add-ins and Macros列表中。确认Add-in左边的检查框处于选中状态,然后按Close。


回到集成环境,一般来说Add-in会在环境中增加一个新工具栏,上面列出这个Add-in可用的命令。现在你可以用这些命令按钮工作了。

(5)Add-in有什么优缺点?

Add-in是和开发环境集成在一起的,这意味着我们不用离开IDE就能利用Add-in完成工作,而不需要借助外部工具,这是Add-in的一大优点。因此,Add-in通常用来简化一些重复性的工作,提高程序员的工作效率。例如,某个名为AutoBuildNumber的Add-in可以在每次编译工程的时候自动将版本号加1;另外一个名为WndTabs的著名的Add-in(估计读者中部分人已经在使用它了)则提供了一个类似于Ultra-Edit的页面,让程序员可以快速在打开的文件中切换。

Add-in也有它的缺点,这表现在几方面。首先,如果你的目的是简化重复性的工作,并不一定非要编写Add-in不可:你可以首先考虑编写宏脚本(Macro Script)。脚本和Add-in一样具有访问完整的Developer Studio Object Model的能力,而且它的编写和维护更简单,所以也是个不错的选择。但是,脚本无法实现比较高级的功能,例如调用Win32 API等等;这时候你就该考虑Add-in了。

Add-In的另外一个缺点是它受限制于开发环境提供的接口。微软为Add-In提供了一组接口,你需要使用这些接口的属性和方法来完成实际的任务,如果某些特性是接口所不提供的,那么你也很难在Add-in中实现它们。要了解Add-in能做些什么和不能做什么,最好的办法就是熟悉Developer Studio对象模型,为此请参考MSDN。此外,Add-in无法(或很难)实现高级UI功能,比如Add-in所能实现的用户界面基本上就只有模态对话框而已;如果想自己建立一个窗口并且和IDE联系在一起,几乎是不可能的。像WndTabs这样的Add-in实现了一些特殊的技巧来突破这个限制,但它多多少少利用了一些Hacker手段,这并不为官方所支持,也就是说只要微软对Visual C++作一点小小的改动,它就可能完全失效;另外要自己摸索出这些技巧也是非常困难的,所以一般来讲并不推荐这种做法。

二、本文的例子程序

现在转入正题,介绍一下我根据Add-in文档资料作的一个具体例子。这个例子实现了四个有用的方法,下面我将一一介绍。

(1)Show Object Model

这个方法是学习文档的产物,因为我在阅读MSDN的时候,总想了解Add-in规范所提供的对象模型具体应该是什么样子的。于是有了这个方法,当你选择此项命令的时候,它会调出一个对话框,其中按照层次关系列出模型中的所有对象,以及它们各自具有的属性。


从图中你可以看到,模型最顶层是一个Application对象,它的名字为Microsoft Developer Studio,版本为6.0,其他属性也可以从图中很直观的查看。关于这些具体对象和他们之间的关系,请参考MSDN。

在实际编写Add-in的时候我发现这个方法也是非常有用的,因为它能够直观的告诉我:当前有哪些对象,以及对象的那些属性是可用的。这样我就节省了不少时间来在Visual C++和MSDN之间反复切换。

(2)Switch Between .H and .CPP

用过Borland C++ Builder的朋友应该很熟悉这个方法,比如当前打开了Test.cpp,用这个命令就能立刻查看对应的Test.h,反之亦然。Visual C++并没有实现类似的功能,所以我写了个方法来模拟C++ Builder。

(3)Open RC As Text

有时候我们需要打开工程的资源文件作一些文字上的编辑,在某些情况下这比用Resource Editor更方便快捷,也可以避开集成环境的限制。可是Visual C++中并没有简单的方法可以做到这一点,于是每次我都不得不关闭所有资源窗口、用Open命令浏览到RC文件、选择打开方式为Text,经过好几个步骤才能完成,为什么不自动化一点呢?Open RC As Text命令就是实现这个功能的。

(4)Include Browser

这个命令可以快速打开列在Visual C++ Include环境变量中的头文件,避免了手工查找的麻烦。它有一个很贴心的功能,当列出的文件太多时,输入你想要看的文件头几个字符,列表会自动过滤出符合条件的文件,不需要在长长的列表中前后翻动。例如我想查看一下和Windows Socket相关的头文件定义,只要选择这个命令并输入“winsock”,于是列表中会列出符合条件的文件,选择文件并按“Open”即可打开它,如下图所示。


关于程序代码并没有很特殊的地方,所以我也不打算讲解它们,如果你有不明白的地方,参考源代码即可。即便如此,代码仍然提供了一些有趣的东西,例如简化查询接口属性和方法的模板函数、CComDispatchDriver对象的使用、在对话框中嵌入工具栏、定制绘画(Custom Draw)的列表控制、注册表查询函数等,它们中许多方法都是可重用或可借鉴的。具体内容请查阅相关的代码。

三、关于程序的说明和结论

因为这个程序目前还只是草稿,如果你对Add-in编程感兴趣的话,那么它提供了一个良好的起点;即使你不愿意自己编写的话,上面列出的几项功能也可能对你的日常编程任务有所帮助。Add-in编程是一个有趣的领域,在这里你可以和每日相伴自己的集成开发环境同呼吸共命运,并且在Visual Studio.Net 2002和Visual Studio.Net 2003中这个模型还在不断变化和增强。本文的例子是以Visual C++ 6.0完成的,但是在后续的版本中仍有参考价值。如果你想进一步了解关于Add-in的更多资料,请参考MSDN Online、CodeGuru和CodeProject等几个著名的Visual C++编程站点,相信你一定能够提高自己编写Add-in的能力。



参考文献:

[1].COMdatasheethttp://www.dzsc.com/datasheet/COM_1118194.html.


来源:维珍0次

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭