首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

Word 2000/XP 內建 COM 增益集開發完整指南

     編輯:關於VC++

前言

Office 2000/XP 中 Word 內建 COM 增益集的實作方式與 Outlook 2000 大同小異,本文著重於差異點,配合前文《Office 2000 內建 COM 增益集程式設計實作》可事半功倍。

Word 內建 COM 增益集執行效果圖

三大關鍵差異點

1. Stdafx.h 匯入型別程式庫路徑不同

// Office 2000
#import "E:\\Program Files\\Microsoft Office\\Office\\mso9.dll" rename_namespace("Office")
using namespace Office;
#import "D:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA6\\VBE6EXT.olb" rename_namespace("VBE6")
using namespace VBE6;
#import "E:\\Program Files\\Microsoft Office\\Office\\MSWORD9.olb" rename("ExitWindows","ExitWindowsEx"), named_guids, rename_namespace("MSWord")
using namespace MSWord;

// Office XP (註解備份)
/*
#import "C:\\Program Files\\Common Files\\Microsoft Shared\\Office10\\MSO.DLL" rename_namespace("Office")
using namespace Office;
#import "D:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA6\\VBE6EXT.olb" rename_namespace("VBE6")
using namespace VBE6;
#import "D:\\Program Files\\Microsoft Office\\Office10\\MSWORD.olb" rename("ExitWindows","ExitWindowsEx"), named_guids, rename_namespace("MSWord")
using namespace MSWord;
*/

2. 登錄資訊 (*.rgs) 針對 Word 專屬路徑

HKCU
{
    Software
    {
        Microsoft
        {
            Office
            {
                Word
                {
                    Addins
                    {
                        'WordAddin.Word2000Addin'
                        {
                            val FriendlyName = s 'Word2000 Addin'
                            val Description = s 'Word2000 Addin'
                            val LoadBehavior = d '00000003'
                            val CommandLineSafe = d '00000001'
                        }
                    }
                }
            }
        }
    }
}

3. 取得 CommandBars 方式不同

Word 沒有 ActiveExplorer 物件,直接從 _Application 取得 CommandBars:

STDMETHOD(OnConnection)(IDispatch *Application, ext_ConnectMode ConnectMode, IDispatch *AddInInst, SAFEARRAY **custom)
{
    CComPtr<Office::_CommandBars> spCmdBars;
    CComQIPtr<MSWord::_Application> spApp(Application);
    ATLASSERT(spApp);

    HRESULT hr = spApp->get_CommandBars(&spCmdBars);
    if (FAILED(hr)) return hr;
    ATLASSERT(spCmdBars);
    // 後續工具列建立邏輯同 Outlook 範例
    ......
}

Word 97 相容方案(補充)

Office 97 不支援 IDTExtensibility2,可採 VBA + ATL 增益集 方式:

  • ATL 專案建立 Init()、Uninit() 兩個匯出函數,分別處理工具列按鈕建立/移除。
  • Word 模板 (.dot) 中撰寫 VBA AutoExec/AutoExit 建立/釋放 COM 物件並呼叫上述函數。
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

參考資料

  • Office 2000 內建 COM 增益集程式設計實作 — 徐景周(譯)
  • Writing an MS Word addin — Amit Dey
  • ATL 開發指南(第二版)— Tom Armstrong & Ron Patton

結語

掌握三大差異點,即可快速將 Outlook 增益集經驗移植至 Word 2000/XP。完整原始碼請參考本文附件。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved