ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 11665|回复: 18

[分享] VC6开发WordCOM加载项的方法及注意事项

[复制链接]

TA的精华主题

TA的得分主题

发表于 2009-5-14 12:18 | 显示全部楼层 |阅读模式
大家好,好久没有发新贴了,此贴来给广大的COM爱好者入门之用。(我也是入门者)
VC6开发Word的Com加载项的难度比VB6难,所以,很多我们VB爱好者在这上面会浪费很多时间。
我在浪费很多时间后,做了一个示例,以及注意事项,以避免大家不必要的集体浪费时间。

整体描述:
    1.注意源码中有大量的注释,以下的注意,只是针对VB不同的地方
    2.此示例是参考网上的,但几乎每句代码,我都会判断他的作用,是否一定要用,所以,可以说,比目前网上找到的资料更适合学过VB的。
    3.此工程中多余的东西,我大多删除了,所以,不太大。

WordAddin.rar (43.59 KB, 下载次数: 194)
如果你是开发爱好者,请看(如果你不是开发爱好者,你很可能一头雾水,也是正常的,大家都是从这里经过的):
注意:
本说明在参照以下的内容下的补充:(即是对以下内容的补充)
http://www.iforchina.com/show.aspx?id=22232&cid=157
http://www.vckbase.com/document/viewdoc/?id=644
http://www.vckbase.com/document/viewdoc/?id=539
http://www.vckbase.com/document/viewdoc/?id=648
0. 在运行本工程前,将修改"StdAfx.h"中的#import中的路径及WordAddin.h中的#import,否则,90%都编译不过(10%能编译过的,与我的PC安装Office与Window路径完全一样的)
    修改的方法及细节见stdafx.h中的注释
1. 在#import时,只在引用Office(2003 sp3)库时,加named_guids,其他可不用加!
named_guids解释:
Tells the compiler to define and initialize GUID variables in old style, of the form LIBID_MyLib, CLSID_MyCoClass, IID_MyInterface, and DIID_MyDispInterface

2. 在rgs文件中,给注册项赋值用单引号!
3. 关于CComPtr与CComQIPtr的区别,请参考:http://www.cnblogs.com/howareyou ... /11/18/1336018.html
不过,一般VB开发者很难看懂,所以,简单的方法是记住:一般在Office库与Word库的有5处使用CComQIPtr,这5处是:Application、CommandBarButton、CommandBarComboBox、CommandBars、Document(这个在OnConnection时,通常还没有实例化,所以,用到的不多),其他都用CComPtr即可。
(注意3的措词)
4. 其中的ATLASSERT语句都是判断性的,可以删掉。
5. 另外,象if (FAILED(hr)) return hr; 这样的语句,可以删掉,都是判断性的,即判断前面是否正常执行
6. 按钮的图片是通过mspaint做的,在放到路径下,在利用"resources"新增2个图片,关闭工程后,在将rc中将图片的名字设为mspaint中的图片。
7. 菜单的Button按钮,必须给PutTag一个字符串,否则,事件无法激活。



kongguisheng@foxmail.com
2009.5.10

[ 本帖最后由 konggs 于 2009-5-14 13:05 编辑 ]

TA的精华主题

TA的得分主题

发表于 2009-5-14 13:10 | 显示全部楼层
谢谢版主分享,既然vba和vb有那么深的渊源,而且,vb制作com加载项又那么复杂,我们为什么要去研究它,是自己使用的习惯,还是vc制作的COM加载项有着特殊的优势?

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-5-14 15:02 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
wjhere兄:
      是这样的,有部分VC的程序员,写插件是不用VB的。

祝贺现在的wjhere兄在Word上水平越来越高,音标助手,做得不错哈。

TA的精华主题

TA的得分主题

发表于 2009-5-14 18:35 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
版主说得好,而且有许多VB无法做到的,vc可以实现,前一段时间得到了一个可以拦截中文输入法的dll,就是使用vc写的。而vb可能无法完成。
谢谢版主的肯定,音标助手也算是一个“持久战”的结果吧,关键是找到了tangqingfu兄这样的专业又热心的伙伴,加上论坛上其他高手的代码。嘻嘻……

TA的精华主题

TA的得分主题

发表于 2009-7-30 17:40 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
原帖由 wjhere 于 2009-5-14 13:10 发表
谢谢版主分享,既然vba和vb有那么深的渊源,而且,vb制作com加载项又那么复杂,我们为什么要去研究它,是自己使用的习惯,还是vc制作的COM加载项有着特殊的优势?


VC语言制作com加载项的优点在:代码执行的速度和效率比VB快佷多,而且微软推荐使用VC语言制作com加载项,就此微软还提供了专门的SDK.
另就安全性而言,VC语言制作com加载项比VB语言制作com加载项更安全。

TA的精华主题

TA的得分主题

发表于 2009-7-30 20:48 | 显示全部楼层
谢谢dul 兄的指点,一直都用vb,如果使用vc,难学吗。dul 兄用什么?我在word加载项的制作过程中遇到了一个难题,CommandBarComboBox只对第一个文档有效,到别的文档丢失了。以前遇到过CommandBarButton也遇到这样的问题,通过设置唯一的tag属性解决了。当然在知道这个办法之前也采用了一个曲折的办法,吧工具条和按钮的添加放在Word的DocumentChange事件中,可以同时解决上面两个问题。现在不想回到这个办法中去,请教有没有办法解决?(offcie2003)

TA的精华主题

TA的得分主题

发表于 2009-7-30 21:09 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-8-3 18:58 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
原帖由 wjhere 于 2009-7-30 20:48 发表
谢谢dul 兄的指点,一直都用vb,如果使用vc,难学吗。dul 兄用什么?我在word加载项的制作过程中遇到了一个难题,CommandBarComboBox只对第一个文档有效,到别的文档丢失了。以前遇到过CommandBarButton也遇到这样的 ...


如果使用vc,难学吗?
可以肯定的讲VC比VB要难佷多,VB的语言类似英语,VB(Visual Basic)  Basic是基础的意思呀。
VB对于整个office的编程而言:其漫长的共同“成长”,使其简化了与office对象模型的调用,所以其编程很方便也很简单。
对于编程而言,采用什么语言其实并不重要,重要的是:需要实现的功能是什么?实现该功能使用什么语言最方便?当然是你最擅长什么?

基于office的二次开发10多年来,一直是VBA为核心,至少在未来的版本中应该还会被支持,从office2007来看,微软虽然在功能支持上变化不大,且也有传言在2010中甚至会做一些细部的更新,但整体已经开始在有意弱化其影响。

从2003开始以PIA和VS的代码托管方式的VSTO开始逐渐推广,未来以office整合应用和基于.net的混合语言开发将是重要的课题被提出,当然这要看使用者的使用状况。

我在word加载项的制作过程中遇到了一个难题:
你通过CommandBarComboBox需要实现的功能是什么?
到别的文档丢失了?!!在什么状态下调用的
请上传示例,对症下药。。。

TA的精华主题

TA的得分主题

发表于 2009-8-4 07:06 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
原帖由 dul 于 2009-8-3 18:58 发表


如果使用vc,难学吗?
可以肯定的讲VC比VB要难佷多,VB的语言类似英语,VB(Visual Basic)  Basic是基础的意思呀。
VB对于整个office的编程而言:其漫长的共同“成长”,使其简化了与office对象模型的调用,所以 ...

谢谢,传一个附件,请指教呀。

word加载项.rar

13.72 KB, 下载次数: 76

TA的精华主题

TA的得分主题

发表于 2009-8-5 20:40 | 显示全部楼层
原帖由 wjhere 于 2009-8-4 07:06 发表

谢谢,传一个附件,请指教呀。


你的附件已经看过:
1. 在Connect 中建立的菜单响应过程在Word启动时加载放入内存,在新开文档时此动作不会再次加载,Change方法就会失效。
2. 直接在Connect 建立菜单响应过程的方法很容易出现 INT(接触不良)
3. 菜单的响应一般不建议使用 Change 和 Click 方法,使用.OnAction属性会稳定佷多
4. 在com中一般使用.Parameter 属性会比Tag 属性来的稳定
  'Parameter 属性 返回或设置这样一个字符串,应用程序可用此字符串执行命令。String 类型,可读写。   
  'Parameter 属性是类在响应按钮事件时区分按钮的标记。
  '如果用 Tag 属性来区分的话,会发生二次事件。不知道为什么。
4. 程序的设计稳定和全盘考量是第一位的,简练则排在第2位(看看印度程序员,软件的设计都较拖沓冗长,但软件整体把握得很好,且很稳定)

建议可以看看 Coming 的这篇com制作教程(有附件):
http://www.officefans.net/cdb/viewthread.php?tid=96508&extra=page%3D1%26amp%3Bfilter%3Ddigest&page=1

[ 本帖最后由 dul 于 2009-8-6 10:43 编辑 ]
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-24 05:50 , Processed in 0.051292 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表