Word2000/XP中內部COM外掛的程式設計實現 (轉)
2000/XP中內部COM的實現
編譯:徐景周
:namespace prefix = o ns = "urn:schemas--com::office" />
示例原始碼(?paper_id=734)
簡介
Office2000/XP中Word下的內部COM外掛的實現方法和前面我的文章< Office2000下內部COM外掛的程式設計實現>中介紹的示例2000下內部COM外掛的實現方法與步驟基本相同,在這裡,我想不用再重複哆嗦大部分前面文章裡已經講過的內容了,只將重點放在它們間實現的不同點上,有興趣的朋友可以參看前面這篇文章,然後再看這篇文章一定會事半功倍的。本文章提供的Word內部COM外掛示例原始碼執行後的效果圖如下所示:
具體實現
下面,讓我們來看看它們間(Word2000 vs Outlook2000內部COM外掛)的實現內容到底有什麼不同呢?可以先建一個ATL工程,起名WordAddin,再插入一個簡單,起名IWord2000Addin,其它步驟可參看前面我講的文章中介紹的內容進行操作。在這裡,除了下面介紹的原始碼內容需要改動處,其它部分的原始碼內容基本上和前面我講的文章中的示例原始碼相同,一般並不需要改動(除非你有其它方面的特殊需求)。
第一點:在中Stdafx.h中的型別的匯入部分原始碼將有所不同,可將原始檔中原始碼替換為下面部分既可。
// 匯入工程所需Office2K及Word2K型別庫(路徑可根據路徑自行設定), jingzhou xu
/* Office XP下匯入如下: */
//#import "C:Program FilesCommon FilesMicrosoft SharedOffice10MSO.DLL" rename_namespace("Office")
//using namespace Office;
//#import "D:Program FilesCommon FilesMicrosoft SharedVBAVBA6VBE6EXT.olb" rename_namespace("VBE6")
//using namespace VBE6;
//#import "D:Program FilesMicrosoft OfficeOffice10MSWORD.olb" rename("Exit","ExitWindowsEx"),named_guids,rename_namespace("MSWord")
//using namespace MSWord;
/* Office 2000下匯入使用 */
#import "E:Program FilesMicrosoft OfficeOfficemso9.dll" rename_namespace("Office")
using namespace Office;
#import "D:Program FilesCommon FilesMicrosoft SharedVBAVBA6VBE6EXT.olb" rename_namespace("VBE6")
using namespace VBE6;
#import "E:Program FilesMicrosoft OfficeOfficeMSWORD9.olb" rename("ExitWindows","ExitWindowsEx"),named_guids,rename_namespace("MSWord")
using namespace MSWord;
第二點:註冊型別資訊有所不同(*.rgs),如將檔案Word2000Addin.rgs中內容的下半部分修改如下所示:
HKCU
{
Software
{
Microsoft
{
Office
{
Word
{
Addins
{
'WordAddin.Word2000Addin'
{
val FriendlyName = s 'Word2000 Addin'
val Description = s 'Word2000 Addin'
val Loaehavior = d '00000003'
val CommandLineSafe = d '00000001'
}
}
}
}
}
}
}
第三點:Word2000/XP中沒有ActiveExplorer物件,所以可以不再經過它,直接從_Application中獲得Commanrs物件進行操作。修改部分如下面原始碼所示:
// 裝缷外掛時處理
STDMETHOD(OnConnection)(IDispatch * Application, ext_ConnectMode ConnectMode, IDispatch * AddInInst, SAFEARRAY * * custom)
{
CComPtr < Office::_CommandBars> spCmdBars;
// Word應用介面_Application
CComQIPtr<:_application> spApp(Application);
SERT(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()和OnDinnection介面涵數來實現在裝載外掛和解除安裝外掛時的操作。我們可以在在工程中建立兩個介面涵數,如名為:Init()和Uninit(),把它們當做上面所提到的兩個裝載、解除安裝介面涵數,可以在Init()中加入實現插入工具條按鈕部分,程式碼大致和本文示例相同,Uninit()中實現取消操作。然後可以建一Word模板(*.dot),在其中插入VBA來實現建立並載入、解除安裝的方法,如下面VBA原始碼:
Dim o as Application
Dim obj as
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
聯絡方式:
地址:陝西省西安市勞動路2號院六單元
郵編:710082
編者E:
未來工作室(Future Studio)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-993235/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Office2000下內部COM外掛的程式設計實現(之二) (轉)程式設計
- Excel2000/XP和PowerPoint2000/XP下內部COM外掛的實現 (轉)Excel
- JavaNio程式設計實現phonegap外掛websocketJava程式設計Web
- 使用VC++ ATL實現iStylePDF的COM外掛C++
- [前端外掛] js返回頂部 效果實現前端JS
- 在Linux作業系統中實現內部程式通訊(轉)Linux作業系統
- JavaScript 函數語言程式設計中 compose 實現JavaScript函數程式設計
- 程式設計師偷懶指南 — 用chrome外掛實現前端資訊推送程式設計師Chrome前端
- 程式設計師偷懶指南 -- 用chrome外掛實現前端資訊推送程式設計師Chrome前端
- 無外掛Vim程式設計技巧程式設計
- C#中Dictionary的內部實現剖析C#
- 淺談Java中利用JCOM實現仿Excel程式設計JavaExcel程式設計
- KVO的內部實現
- vue當中設計Tabbar外掛時的思考VuetabBar
- 前端程式設計提高之旅(一)----外掛前端程式設計
- PHP外掛系統的實現(七):外掛案例PHP
- Elasticsearch實現自定義排序外掛(轉載)Elasticsearch排序
- google內部使用的良好程式設計習慣Go程式設計
- Linux守護程式的程式設計實現(轉)Linux程式設計
- PHP外掛系統的實現(五):觸發外掛PHP
- mysqldump的內部實現原理MySql
- gostring的內部實現Go
- 好程式設計師技術分享jQuery實現類似fullpage外掛的全屏滾動效果程式設計師jQuery
- Java程式設計師必備的Intellij外掛Java程式設計師IntelliJ
- 關於繼承內部類——java程式設計思想示例程式分析; (轉)繼承Java程式設計
- 座標曲線的程式設計實現 (轉)程式設計
- 用 Thunk 實現 COM 的掛鉤
- Nimda程式設計內幕 (轉)程式設計
- javascript實現的微信分享外掛JavaScript
- jQuery實現的cookie操作外掛jQueryCookie
- 外掛化設計二
- 外掛化設計三
- 使用Microsoft Agent的COM介面程式設計(轉)ROS程式設計
- Win 2000/XP中實現硬碟效能突破的方法(轉)硬碟
- Windows XP 系統中實現1秒關機(轉)Windows
- Android外掛化技術之旅 1 開篇 - 實現啟動外掛與呼叫外掛中的Activity和ServiceAndroid
- [外掛擴充套件]返回頂部ReturnTop外掛套件
- 透過Domino COM實現Web的痕跡保留設計思路 (轉)Web