Word2000/XP中内部COM插件的编程实现
2006-07-22 11:45:24 来源:WEB开发网// 装缷插件时处理
好了,Word2000/XP下和Outlook2000下的内部COM插件实现的不同点主要就这些了,具体实现的详细代码可参看两篇文章所附带示例源码,内有详细注释。
STDMETHOD(OnConnection)(IDispatch * Application,
ext_ConnectMode ConnectMode,
IDispatch * AddInInst,
SAFEARRAY * * custom)
{
CComPtr < Office::_CommandBars> spCmdBars;
// Word应用接口_Application
CComQIPtr<MSWord::_Application> spApp(Application);
ATLASSERT(spApp);
// 获取CommandBars接口
HRESULT hr = spApp->get_CommandBars(&spCmdBars);
if(FAILED(hr))
return hr;
ATLASSERT(spCmdBars);
......
......
}
最后,我想再补充一点的是,由于Office97及其以下版本不支持内部COM插件接口(特别是IDTExtensibility2接口),所以以上程序在Word97中并不适用。为了能在Word97下也能用,我们可以采用另一种方法:既VBA+ATL插件来实现.在用ATL编程时由于没有IDTExtensibility2接口支持,所以不能再用OnConnection()和OnDisconnection接口涵数来实现在装载插件和卸载插件时的操作。我们可以在在工程中创建两个接口涵数,如名为:Init()和Uninit(),把它们当做上面所提到的两个装载、卸载接口涵数,可以在Init()中加入实现插入工具条按钮部分,代码大致和本文示例相同,Uninit()中实现取消操作。然后可以建一Word模板(*.dot),在其中插入VBA来实现创建并加载、卸载组件的方法,如下面VBA源码:
Dim o as Application
Dim obj as Object
Sub AutoExec()
Set obj = CreateObject("Word97Addin.Addin")
Set o = ThisDocument.Application
obj.Init o
End Sub
Sub AutoExit()
Set o = ThisDocument.Application
obj.Uninit o
Set obj = Nothing
Set o = Nothing
End Sub
由于这些并不是本篇文章的重点(重点是实现Word2000/XP下内部COM插件),所以,在这里我就不必再详细讨论了,有兴趣的读者可以参考其它相关资料。参考文献:
Office2000下内部COM插件的编程实现 -- 徐景周(译者)
Writing an MS Word addin -- Amit Dey
ATL开发指南(第二版) -- Tom Armstrong & Ron Patton
更多精彩
赞助商链接