自己动手编写一个VS插件(五)
作者:朱金灿
来源:http://blog.csdn.net/clever101
继续编写VisualStudio插件。这次我编写的插件叫DevAssist(意思是开发助手)。在看了前面的文章之后你知道了一个VisualStudio插件一般是由两个工程组成的:功能dll和资源dll。首先我们先建一个功能dll——DevAssist,具体过程请参考第一篇:自己动手编写一个VS插件(一)。然后我们再建一个资源dll——DevAssistUI。
编译一下DevAssistUI工程,结果出错:
generalerror c1010070: Failed to load and parse the manifest
上网查了下,发现编译一个空工程会出现这个错误,于是把一个位图资源导入进去再编译就没有这个错误了。再编译DevAssistUI工程,还有错误:
1>------已启动生成: 项目: DevAssistUI, 配置: Debug Win32 ------
1>正在链接...
1>LINK: error LNK2001: 无法解析的外部符号 __DllMainCRTStartup@12
1>E:\PIE3_src\outdir/Debug/1033\DevAssistUI.dll: fatal error LNK1120: 1 个无法解析的外部命令
1>生成日志保存在“file://E:\PIE3_src\Intdir\Debug\DevAssistUI\BuildLog.htm”
1>DevAssistUI - 2 个错误,0 个警告
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
在工程设置里把该工程改为无入口点即可,如下图:
现在我们开始实现创建一个工具栏并把它显示出来。首先需要在AddIn.rgs中指定资源dll,具体是在HKCU段添加SatelliteDllName和SatelliteDllPath两个变量,具体如下:
HKCU
{
NoRemove 'SOFTWARE'
{
NoRemove 'Microsoft'
{
NoRemove 'VSA'
{
NoRemove '9.0'
{
NoRemove 'AddIns'
{
ForceRemove'DevAssist.Connect'
{
valLoadBehavior = d 1
valCommandLineSafe = d 0
valCommandPreload = d 0
valFriendlyName = s 'DevAssist -开发助手。'
valDescription = s 'DevAssist - 用于辅助开发。'
valAboutBoxDetails = s '有关DevAssist的详细信息,请参见DevAssist 站点\r\nhttp://blog.csdn.net/clever101\r\n关于客户支持,请致电: 1-800-xxx-xxxx。\r\n版权所有(C) 2013 DreamStudio Inc.'
valAboutBoxIcon = s '%MODULE%,1'
val SatelliteDllName = s 'DevAssistUI.dll'
valSatelliteDllPath = s '%MODULE_PATH%'
}
}
}
}
}
}
NoRemove 'SOFTWARE'
{
NoRemove 'Microsoft'
{
NoRemove 'VisualStudio'
{
NoRemove '9.0'
{
NoRemove 'AddIns'
{
ForceRemove'DevAssist.Connect'
{
valLoadBehavior = d 1
valCommandLineSafe = d 0
valCommandPreload = d 0
valFriendlyName = s 'DevAssist -开发助手。'
valDescription = s 'DevAssist - 用于辅助开发。'
valAboutBoxDetails = s '有关DevAssist的详细信息,请参见DevAssist 站点\r\nhttp://blog.csdn.net/clever101\r\n关于客户支持,请致电: 1-800-xxx-xxxx。\r\n版权所有(C) 2013 DreamStudio Inc.'
valAboutBoxIcon = s '%MODULE%,1'
val SatelliteDllName = s 'DevAssistUI.dll'
valSatelliteDllPath = s '%MODULE_PATH%'
}
}
}
}
}
}
}
然后开始添加创建工具栏的代码:
然后编译如果还要错误就重启VS,如果还有错误就打开任务管理器,杀死所有explorer.exe,然后新建一个explorer进程。
c.修改工具栏按钮的位图资源或提示,但是工具栏总是不更新。
在工具栏的自定义对话框中将工具栏删掉,如下:
然后重启VS再启动插件即可看到工具栏的更新状态。