HOWTO: 從了 C 應用程式,而不是 C + + 中使用 OLE 自動化

重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。

按一下這裡查看此文章的英文版本:181473
本文已封存。本文係以「現狀」提供且不會再更新。
結論
如果需要以 C,而不是 C + + 設計程式 OLE 自動化可能很難,因為 「 元件物件模型 (COM),建置組塊的 OLE,周圍的 C + + 類別二進位的版面配置所設計。根據 WINDOWS.H,但是,包含的標頭檔有 C 編譯的內建支援 ; 因此,您可以模仿 C + + 物件的行為,並進行 OLE 自動化呼叫。本文將告訴您,如何建置 Win32 主控台應用程式,使用 C,啟動 Microsoft Excel,並讓它看得見透過 OLE 自動化。
其他相關資訊
請使用下列方法:
  1. Microsoft Visual C++ 中建立新的 [Win32 主控台應用程式] 專案 5.0。
  2. 將 Main.c 不是 Main.cpp 文字檔案加入至您的專案。
  3. 將下列程式碼加入至 Main.c 檔案:
          #include <stdio.h>      #include <windows.h>      void main(void) {         IDispatch *pDisp; // Main IDispatch pointer.         unsigned short *ucPtr; // Temporary variable to hold names.         DISPID dispID; // Temporary variable to hold DISPIDs.         CLSID clsid; // Holds CLSID of server after CLSIDFromProgID.         HRESULT hr; // General error/result holder.         char buf[8192]; // Generic buffer for output.         // IDispatch::Invoke() parameters...         DISPPARAMS dispParams = { NULL, NULL, 0, 0 };         VARIANT parm1;         DISPID dispidNamed = DISPID_PROPERTYPUT;         // Initialize OLE Libraries.         OleInitialize(NULL);         {            // Get CLSID for Excel.Application from registry.            hr = CLSIDFromProgID(L"Excel.Application", &clsid);            if(FAILED(hr)) {               MessageBox(NULL, "Excel not registered.", "Error",                          MB_SETFOREGROUND);               return;            }            // Start Excel97, Excel 2000, or Excel 2002 and get its IDispatch pointer.            hr = CoCreateInstance(&clsid, NULL, CLSCTX_LOCAL_SERVER,                                  &IID_IDispatch, (void **)&pDisp);            if(FAILED(hr)) {               MessageBox(NULL, "Couldn't start Excel.", "Error",                          MB_SETFOREGROUND);               return;            }            // Get the 'visible' property's DISPID.            ucPtr = L"Visible";            pDisp->lpVtbl->GetIDsOfNames(pDisp, &IID_NULL, &ucPtr, 1,                                         LOCALE_USER_DEFAULT, &dispID);            sprintf(buf, "DISPID for 'Visible' property = 0x%08lx",                    dispID);            MessageBox(NULL, buf, "Debug Notice", MB_SETFOREGROUND);            // Initiate parameters to set visible property to true.            VariantInit(&parm1);            parm1.vt = VT_I4;            parm1.lVal = 1; // true            // One argument.            dispParams.cArgs = 1;            dispParams.rgvarg = &parm1;            // Handle special-case for property-puts!            dispParams.cNamedArgs = 1;            dispParams.rgdispidNamedArgs = &dispidNamed;            // Set 'visible' property to true.            hr = pDisp->lpVtbl->Invoke(pDisp,               dispID, &IID_NULL, LOCALE_SYSTEM_DEFAULT,               DISPATCH_PROPERTYPUT | DISPATCH_METHOD,               &dispParams, NULL, NULL, NULL            );            if(FAILED(hr)) {               sprintf(buf, "IDispatch::Invoke() failed with %08lx", hr);               MessageBox(NULL, buf, "Debug Notice", MB_SETFOREGROUND);            }            // All done.            MessageBox(NULL, "done.", "Notice", MB_SETFOREGROUND);         }         // Uninitialize OLE Libraries.         OleUninitialize();      }					
  4. 編譯並執行。
参考
OLE、 COM 和自動化方面更一般的資訊,請參閱本書 」 內部 OLE 」 由 Kraig Brockschmidt (Microsoft 按)。

如需有關 IDispatch 的詳細資訊,請參閱 Microsoft Visual C++ 線上說明]。

詳細有關 COM OLE 和使用 Microsoft Visual C++,automating Microsoft Excel 參閱章節 23-27 的書籍 」 內部 Visual C++"由 David J.Kruglinski (Microsoft 按)。

(c) Microsoft Corporation 1999,保留所有的權限。由 Joe Crump,Microsoft Corporation 的貢獻。

警告:本文為自動翻譯

內容

文章識別碼:181473 - 最後檢閱時間:12/05/2015 08:25:22 - 修訂: 4.3

Microsoft Excel 2000 Standard Edition, Microsoft Visual C++ 4.0 Standard Edition, Microsoft Visual C++ 5.0 Enterprise Edition, Microsoft Visual C++ 6.0 Enterprise Edition, Microsoft Visual C++ 5.0 Professional Edition, Microsoft Visual C++ 6.0 Professional Edition, Microsoft Visual C++, 32-bit Learning Edition 6.0, Microsoft Excel 2002 Standard Edition, Microsoft Excel 97 Standard Edition

  • kbnosurvey kbarchive kbmt kbhowto KB181473 KbMtzh
意見反應