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

Makale çevirileri Makale çevirileri
Makale numarası: 181473 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Ö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.

Özellikler

Makale numarası: 181473 - Last Review: 12 Şubat 2007 Pazartesi - Gözden geçirme: 4.3
Bu makaledeki bilginin uygulandığı durum:
  • 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
Anahtar Kelimeler: 
kbmt kbhowto KB181473 KbMttr
Machine-translated Article
Ö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

Geri Bildirim Ver

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com