![](/icons/39992yi.gif)
、有关Visual C
![](/icons/39992jiajia.gif)
Add-In
![](/icons/39992de.gif)
常见问题
(1)什么是Visual C
![](/icons/39992jiajia.gif)
Add-In?它有什么用途?
总
![](/icons/39992de.gif)
来说
![](/icons/39992dou.gif)
Visual C
![](/icons/39992jiajia.gif)
Add-In就是实现某些特定COM接口
![](/icons/39992de.gif)
组件对象
![](/icons/39992dou.gif)
它可以嵌入Developer Studio集成开发环境中
![](/icons/39992dou.gif)
并提供
![](/icons/39992yi.gif)
些命令用于实现自动化任务
![](/icons/39992dou.gif)
或者简化
![](/icons/39992chengxu.gif)
编写过程等等
![](/icons/39992dou2.gif)
从
![](/icons/39992chengxu.gif)
员
![](/icons/39992de.gif)
角度来讲
![](/icons/39992dou.gif)
![](/icons/39992yi.gif)
个Visual C
![](/icons/39992jiajia.gif)
Add-In基本上就是实现了IDSAddIn接口
![](/icons/39992de.gif)
COM对象
![](/icons/39992dou2.gif)
通过这个接口
![](/icons/39992dou.gif)
Add-in能够掌管Developer Studio环境
![](/icons/39992dou.gif)
并且执行特定
![](/icons/39992de.gif)
任务
![](/icons/39992dou2.gif)
(2)如何编写Add-In?
最简单
![](/icons/39992de.gif)
办法是启动Visual C
![](/icons/39992jiajia.gif)
AppWizard
![](/icons/39992dou.gif)
并且从项目类型中选择DevStudio Add-in Wizard
![](/icons/39992dou.gif)
如下图
![\"\"](\"http://127.0.0.1/Files/BeyondPic/2007-4/19/0741909354546416.g<img)
\" width=667>
(3)到哪里去找有关Add-In
![](/icons/39992de.gif)
编程资料和文档?
最完整
![](/icons/39992de.gif)
文档在MSDN中
![](/icons/39992dou.gif)
位置是MSDN Library\\Visual Studio Documentation\\Using Visual C
![](/icons/39992jiajia.gif)
\\Visual C
![](/icons/39992jiajia.gif)
User\'\'s Guide\\Automating Tasks in Visual C
![](/icons/39992jiajia.gif)
\\Add-ins for Visual C
![](/icons/39992jiajia.gif)
Developer Studio
![](/icons/39992dou2.gif)
区别版本
![](/icons/39992de.gif)
MSDN可能在具体路径上有
![](/icons/39992yi.gif)
些小差别
![](/icons/39992dou2.gif)
(4)如何使用Add-In?
如果你获得了
![](/icons/39992yi.gif)
个有用
![](/icons/39992de.gif)
Add-in
![](/icons/39992dou.gif)
或者自己编写了
![](/icons/39992yi.gif)
个
![](/icons/39992dou.gif)
请按照如下
![](/icons/39992de.gif)
步骤安装它:
从Visual C
![](/icons/39992jiajia.gif)
![](/icons/39992de.gif)
主菜单中选择Tools | Customize
![](/icons/39992dou.gif)
然后翻到Add-ins and Macro Files页面:
![\"\"](\"http://127.0.0.1/Files/BeyondPic/2007-4/19/0741909354514200.g<img)
\" width=581>
如果你
![](/icons/39992de.gif)
Add-in没有出现在列表中
![](/icons/39992dou.gif)
则按Browse按钮
![](/icons/39992dou.gif)
找到Add-in文件(注意要将默认
![](/icons/39992de.gif)
文件类型(*.dsm)改成(*.dll)):
![\"\"](\"http://127.0.0.1/Files/BeyondPic/2007-4/19/0741909354554176.g<img)
\" width=442>
稍候
![](/icons/39992dou.gif)
Add-in将会出现在Add-ins and Macros列表中
![](/icons/39992dou2.gif)
确认Add-in左边
![](/icons/39992de.gif)
检查框处于选中状态
![](/icons/39992dou.gif)
然后按Close
![\"\"](\"http://127.0.0.1/Files/BeyondPic/2007-4/19/0741909354530986.g<img)
\" width=580>
回到集成环境
![](/icons/39992dou.gif)
![](/icons/39992yi.gif)
般来说Add-in会在环境中增加
![](/icons/39992yi.gif)
个新工具栏
![](/icons/39992dou.gif)
上面列出这个Add-in可用
![](/icons/39992de.gif)
命令
![](/icons/39992dou2.gif)
现在你可以用这些命令按钮工作了
![](/icons/39992dou2.gif)
(5)Add-in有什么优缺点?
Add-in是和开发环境集成在
![](/icons/39992yi.gif)
起
![](/icons/39992de.gif)
![](/icons/39992dou.gif)
这意味着我们不用离开IDE就能利用Add-in完成工作
![](/icons/39992dou.gif)
而不需要借助外部工具
![](/icons/39992dou.gif)
这是Add-in
![](/icons/39992de.gif)
![](/icons/39992yi.gif)
大优点
![](/icons/39992dou2.gif)
因此
![](/icons/39992dou.gif)
Add-in通常用来简化
![](/icons/39992yi.gif)
些重复性
![](/icons/39992de.gif)
工作
![](/icons/39992dou.gif)
提高
![](/icons/39992chengxu.gif)
员
![](/icons/39992de.gif)
工作效率
![](/icons/39992dou2.gif)
例如
![](/icons/39992dou.gif)
某个名为AutoBuildNumber
![](/icons/39992de.gif)
Add-in可以在每次编译工程
![](/icons/39992de.gif)
时候自动将版本号加1;另外
![](/icons/39992yi.gif)
个名为WndTabs
![](/icons/39992de.gif)
著名
![](/icons/39992de.gif)
Add-in(估计读者中部分人已经在使用它了)则提供了
![](/icons/39992yi.gif)
个类似于Ultra-Edit
![](/icons/39992de.gif)
页面
![](/icons/39992dou.gif)
让
![](/icons/39992chengxu.gif)
员可以快速在打开
![](/icons/39992de.gif)
文件中切换
![](/icons/39992dou2.gif)
Add-in也有它
![](/icons/39992de.gif)
缺点
![](/icons/39992dou.gif)
这表现在几方面
![](/icons/39992dou2.gif)
首先
![](/icons/39992dou.gif)
如果你
![](/icons/39992de.gif)
目
![](/icons/39992de.gif)
是简化重复性
![](/icons/39992de.gif)
工作
![](/icons/39992dou.gif)
并不
![](/icons/39992yi.gif)
定非要编写Add-in不可:你可以首先考虑编写宏脚本(Macro Script)
![](/icons/39992dou2.gif)
脚本和Add-in
![](/icons/39992yi.gif)
样具有访问完整
![](/icons/39992de.gif)
Developer Studio Object Model
![](/icons/39992de.gif)
能力
![](/icons/39992dou.gif)
而且它
![](/icons/39992de.gif)
编写和维护更简单
![](/icons/39992dou.gif)
所以也是个不错
![](/icons/39992de.gif)
选择
![](/icons/39992dou2.gif)
但是
![](/icons/39992dou.gif)
脚本无法实现比较高级
![](/icons/39992de.gif)
功能
![](/icons/39992dou.gif)
例如
![](/icons/39992diaoyong.gif)
Win32 API等等;这时候你就该考虑Add-in了
![](/icons/39992dou2.gif)
Add-In
![](/icons/39992de.gif)
另外
![](/icons/39992yi.gif)
个缺点是它受限制于开发环境提供
![](/icons/39992de.gif)
接口
![](/icons/39992dou2.gif)
微软为Add-In提供了
![](/icons/39992yi.gif)
组接口
![](/icons/39992dou.gif)
你需要使用这些接口
![](/icons/39992de.gif)
属性和思路方法来完成实际
![](/icons/39992de.gif)
任务
![](/icons/39992dou.gif)
如果某些特性是接口所不提供
![](/icons/39992de.gif)
![](/icons/39992dou.gif)
那么你也很难在Add-in中实现它们
![](/icons/39992dou2.gif)
要了解Add-in能做些什么和不能做什么
![](/icons/39992dou.gif)
最好
![](/icons/39992de.gif)
办法就是熟悉Developer Studio对象模型
![](/icons/39992dou.gif)
为此请参考MSDN
![](/icons/39992dou2.gif)
此外
![](/icons/39992dou.gif)
Add-in无法(或很难)实现高级UI功能
![](/icons/39992dou.gif)
比如Add-in所能实现
![](/icons/39992de.gif)
用户界面基本上就只有模态对话框而已;如果想自己建立
![](/icons/39992yi.gif)
个窗口并且和IDE联系在
![](/icons/39992yi.gif)
起
![](/icons/39992dou.gif)
几乎是不可能
![](/icons/39992de.gif)
![](/icons/39992dou2.gif)
像WndTabs这样
![](/icons/39992de.gif)
Add-in实现了
![](/icons/39992yi.gif)
些特殊
![](/icons/39992de.gif)
窍门技巧来突破这个限制
![](/icons/39992dou.gif)
但它多多少少利用了
![](/icons/39992yi.gif)
些Hacker手段
![](/icons/39992dou.gif)
这并不为官方所支持
![](/icons/39992dou.gif)
也就是说只要微软对Visual C
![](/icons/39992jiajia.gif)
作
![](/icons/39992yi.gif)
点小小
![](/icons/39992de.gif)
改动
![](/icons/39992dou.gif)
它就可能完全失效;另外要自己摸索出这些窍门技巧也是非常困难
![](/icons/39992de.gif)
![](/icons/39992dou.gif)
所以
![](/icons/39992yi.gif)
般来讲并不推荐这种做法