ActiveX Automation 技術讓應用程式得以控制其他程式(如 Microsoft Office 套件)暴露的物件、方法與屬性,實現功能重用。本文以 Visual C++ 6.0 為開發環境,示範建立自動化客戶端,啟動 Word 2000 開啟指定 .doc 文檔、全選內容、複製到剪貼簿,再貼上至自家視圖中。
自動化跨語言傳遞資料依賴 VARIANT(型別+值)。MFC 封裝為 COleVariant,並提供 COleCurrency、COleDateTime 處理貨幣與日期。
CEditView。ClassWizard → Add Class → From a type library → msword9.olb,勾選 _Application、_Documents、Selection,產生 msword9.h/cpp。StdAfx.h 加 #include <afxdisp.h>;InitInstance 開頭呼叫 CoInitialize(NULL)。void CKkView::OnMenuAutoDisplay() {
static char BASED_CODE szFilter[] = "Word Files (*.doc)|*.doc||";
CFileDialog fd(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter);
CString strFilePath;
if (fd.DoModal() != IDOK) return;
strFilePath = fd.GetPathName();
_Application m_App;
Documents m_Docs;
Selection m_Sel;
if (!m_App.CreateDispatch("Word.Application")) {
AfxMessageBox("建立 Word 服務失敗!");
return;
}
m_App.m_bAutoRelease = TRUE;
COleVariant varFilePath(strFilePath), varFalse((short)0), varTrue((short)1, VT_BOOL), varNull("");
m_Docs.AttachDispatch(m_App.GetDocuments());
m_Docs.Open(varFilePath, varFalse, varFalse, varFalse, varNull, varNull, varFalse, varNull, varNull, varTrue, varTrue, varTrue);
m_Sel.AttachDispatch(m_App.GetSelection());
m_Sel.WholeStory();
m_Sel.Copy();
GetEditCtrl().Paste(); // 貼上至 CEditView
m_Docs.ReleaseDispatch();
m_Sel.ReleaseDispatch();
}
COleDispatchDriver 衍生類管理 IDispatch 指標生命週期(CreateDispatch/AttachDispatch/ReleaseDispatch)。COleVariant 包裝,確保型別正確封送。此範例展示了自動化客戶端的基本骨架,可延伸至 Excel、PowerPoint 等伺服器,實現更複雜的文檔處理與報表自動化。