Sie sind zurzeit offline. Es wird auf die erneute Herstellung einer Internetverbindung gewartet.

So wird 's gemacht: Verwenden der OLE-Automatisierung aus anstelle von C++ ein C-Anwendung

Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.

Den englischen Originalartikel können Sie über folgenden Link abrufen: 181473
Dieser Artikel wurde archiviert. Er wird im vorliegenden Zustand bereitgestellt und nicht mehr aktualisiert.
Zusammenfassung
Wenn Sie in C#, sondern C++ programmieren müssen, kann OLE-Automatisierung schwierig sein, da des Komponentenobjektmodells (COM), die Bausteine von OLE, um die binäre Anordnung einer C++-Klasse entworfen wurde. Die Headerdateien enthalten, indem Windows.H, allerdings bieten integrierte Unterstützung für C Kompilierungen; daher Sie imitieren das Verhalten eines C++-Objekts und OLE-Automatisierung aufrufen können. Dieser Artikel beschreibt zum Erstellen einer Win32-Konsolenanwendung mit C, die Microsoft Excel gestartet wird und über OLE-Automatisierung sichtbar macht.
Weitere Informationen
Verwenden Sie die folgende Methode:
  1. Erstellen Sie ein neues "Win32-Konsolenanwendung" Projekt in Microsoft Visual C++ 5.0.
  2. Dem Projekt eine Textdatei Main.c (nicht Main.cpp) hinzufügen.
  3. Fügen Sie der Datei Main.c den folgenden Code:
          #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. Kompilieren und führen.
Informationsquellen
Weitere allgemeine Informationen zum OLE, COM und Automatisierung finden Sie in das Buch "In OLE" von Kraig Brockschmidt (Microsoft Press).

Weitere Informationen über IDispatch finden Sie in der Microsoft Visual C++-Onlinehilfe.

Weitere Informationen über COM OLE und Automatisieren von Microsoft Excel mithilfe von Microsoft Visual C++, finden Sie unter Kapitel 23-27 des Buchs "In Visual C++" von David j Kruglinski (Microsoft Press).

(c) 1999 Microsoft Corporation, alle Rechte vorbehalten. Beiträge von Martin Crump, Microsoft Corporation.

Warnung: Dieser Artikel wurde automatisch übersetzt.

Eigenschaften

Artikelnummer: 181473 – Letzte Überarbeitung: 12/05/2015 08:25:18 – Revision: 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 KbMtde
Feedback