WEB开发网
开发学院软件开发VC Word2000/XP中内部COM插件的编程实现 阅读

Word2000/XP中内部COM插件的编程实现

 2006-07-22 11:45:24 来源:WEB开发网   
核心提示: // 装缷插件时处理STDMETHOD(OnConnection)(IDispatch * Application,ext_ConnectMode ConnectMode,IDispatch * AddInInst,SAFEARRAY * * custom){CComPtr < Of

// 装缷插件时处理
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);
  ......
  ......
}
好了,Word2000/XP下和Outlook2000下的内部COM插件实现的不同点主要就这些了,具体实现的详细代码可参看两篇文章所附带示例源码,内有详细注释。

最后,我想再补充一点的是,由于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

上一页  1 2 

Tags:Word XP 内部

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接