Nasıl YAPıLıR: C++ yerine C uygulama OLE Otomasyonu kullanma

ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.

Makalenin İngilizcesi aşağıdaki gibidir:181473
Bu makale arşivlenmiştir. "Olduğu gibi" sunulmaktadır ve bundan sonra güncelleştirilmeyecektir.
Özet
C++ yerine C program gerek duyarsanız Bileşen Nesne Modeli (COM), yapı taşları olarak OLE, C++ sınıf ikili düzenini tasarlanmıştır olduğundan OLE Otomasyonu zor olabilir. WINDOWS.H tarafından ancak dahil üstbilgi dosyaları C derlemesi için yerleşik destek vardır; bu nedenle, bir C++ nesnesi davranışını taklit edecek ve OLE Otomasyonu aramaları yapın. Bu makalede Microsoft Excel'in başlatır ve OLE Otomasyonu üzerinden görünür hale getirir ve C kullanarak Win32 konsol uygulamalarının nasıl oluşturulacağını açıklar.
Daha fazla bilgi
Aşağıdaki yöntemi kullanın:
  1. Microsoft Visual C++ "Win32 Console Application" yeni bir proje oluşturma 5.0.
  2. Bir <a0><a1>Main.c</a1> (Main.cpp değil)</a0> metin dosyası, projenize eklemek.
  3. Main.c dosyanıza aşağıdaki kodu ekleyin:
          #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. Derleyin ve çalıştırın.
Referanslar
OLE, COM ve otomasyonu ile ilgili daha fazla genel bilgi için kitap "İç OLE" olarak Kraig Brockschmidt (Microsoft Press) başvurun.

ıdispatch hakkında daha fazla bilgi için Microsoft Visual C++ çevrimiçi yardımına bakın.

Bölüm 23-27 rehberi "Inside Visual C++" David J. Kruglinski (Microsoft Press) tarafından OLE ve automating Microsoft Excel, Microsoft Visual C++ kullanarak COM hakkında daha fazla bilgi için bkz:.

(c) Microsoft Corporation 1999, tüm hakları saklıdır. Katkıyı Crump Can, Microsoft Corporation.

Uyarı: Bu makalenin çevirisi otomatik olarak yapılmıştır

Özellikler

Makale No: 181473 - Son İnceleme: 12/05/2015 08:25:21 - Düzeltme: 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 KbMttr
Geri bildirim