Een typebibliotheek voor Office Automation gebruiken vanuit Visual C++.NET

Samenvatting

In dit artikel wordt beschreven hoe u een Visual C++ .NET-project bouwt dat fungeert als een Automation-client voor toepassingen die compatibel zijn met het Component Object Model (COM). Het voorbeeld in dit artikel maakt gebruik van Microsoft Foundation Classes (MFC) met klasse wrappers voor een Office-onderdeel.

Meer informatie

De volgende stappen laten zien hoe u een eenvoudige Automation-client bouwt. Er zijn drie belangrijke stappen voor deze procedure:

  1. Maak de Automation-client.
  2. Voeg code toe om Microsoft Excel te automatiseren.
  3. Voer de Automation-client uit.

U kunt de eerste stap (De Automation-client maken) gebruiken om een nieuwe Automation-client te maken, ongeacht de Automation-server die u gebruikt. De tweede stap (Code toevoegen aan Microsoft Excel automatiseren) is specifiek voor de Automation-server.

Een Automation-client maken

  1. Start Microsoft Visual Studio .NET. Klik in het menu Bestand op Nieuw en klik vervolgens op Project. Selecteer de MFC-toepassing in de typen Visual C++ Projects en geef het project de naam AutoProject.

  2. Wanneer de wizard MFC-toepassing wordt weergegeven, klikt u op Toepassingstype, stelt u het toepassingstype in op Dialoogvenster gebaseerd en klikt u vervolgens op Voltooien.

  3. Wijzig het dialoogvenster IDD_AUTOPROJECT_DIALOG als volgt:

    1. Verwijder het besturingselement Label (IDC_STATIC) en de knop Annuleren (IDCANCEL).
    2. Wijzig de id van de OKbutton in 'IDRUN' en het bijschrift in 'Uitvoeren'.
  4. Maak als volgt klasse-wrappers van de typebibliotheek voor de Automation-server:

    1. Klik in Solution Explorer met de rechtermuisknop op AutoProject en klik vervolgens op Klasse toevoegen.

    2. Klik op MFC-klasse uit Typelib en klik vervolgens op Openen.

    3. Klik op Een klasse toevoegen vanuit: Register en zoek de geregistreerde typebibliotheek voor uw Automation-server.

      Selecteer voor dit voorbeeld 'Microsoft Excel 10.0 Type Library' voor Microsoft ExcelXP of 'Microsoft Excel 9.0 Type Library' voor Microsoft Excel 2000.

    4. Selecteer de interface(s) die u nodig hebt in de lijst en klik vervolgens op het symbool groter dan (>) om ze toe te voegen aan de lijst met interfaces waarvoor MFC wrappers maakt. Klik op Voltooien wanneer u alle interfaces hebt toegevoegd.

      Voor dit voorbeeld hebt u alleen de _Application-interface nodig.

      Belangrijk Als er veel interfaces zijn in de typebibliotheek die u hebt gekozen, selecteert u alleen de interfaces die u wilt gebruiken, omdat MFC een afzonderlijk headerbestand genereert voor elke geselecteerde interface. Door uw interfaceselecties te minimaliseren, kunt u onnodige overhead voorkomen tijdens het genereren en compileren van bestanden.

  5. Als u de COM-servicesbibliotheek wilt laden en inschakelen voor de functie CAutoProjectApp::InitInstance, voegt u de volgende code toe:

    if(!AfxOleInit())  // Your addition starts here.
    {
      AfxMessageBox("Cannot initialize COM dll");
      return FALSE;
      // End of your addition.
    }
    
    AfxEnableControlContainer();
    
    
  6. Voeg een include-instructie toe voor elk headerbestand dat wordt gegenereerd op basis van de interfaces in de typebibliotheek van de Automation-server. Voeg de instructies toe na de include-instructie voor Stdafx.h bovenaan AutoProjectDlg.cpp.

    Voeg voor dit voorbeeld een include toe voor het headerbestand CApplication.h, dat wordt gegenereerd voor de _Application interface:

          #include "stdafx.h"
          #include "CApplication.h"
    
    

Code toevoegen om Microsoft Excel te automatiseren

Klik in het dialoogvenster IDD_AUTOPROJECT_DIALOG met de rechtermuisknop op Uitvoeren en klik vervolgens in de vervolgkeuzelijst op Gebeurtenishandler toevoegen. Selecteer in de wizard Gebeurtenishandler het BN_CLICKED berichttype en klik vervolgens op Toevoegen en bewerken. Voeg de volgende code toe om Excel in de handler te automatiseren:

void CAutoProjectDlg::OnBnClickedRun()
{
   CApplication app;  // app is the Excel _Application object

// Start Excel and get Application object.

if(!app.CreateDispatch("Excel.Application"))
   {
      AfxMessageBox("Cannot start Excel and get Application object.");
      return;
   }
   else
   {
      //Make the application visible and give the user control of
      //Microsoft Excel.
      app.put_Visible(TRUE);
      app.put_UserControl(TRUE);
   }
} 

De Automation-client uitvoeren

Druk op F5 om de Automation-client te bouwen en uit te voeren. Wanneer het dialoogvenster wordt weergegeven, klikt u op Uitvoeren. De Automation-client start Excel en maakt de toepassing zichtbaar. U ziet dat Excel actief blijft, zelfs wanneer de Automation-client wordt beëindigd, omdat de gebruiker de controle over de toepassing heeft gekregen.

Aanvullende notities

Nadat u klassen uit een typebibliotheek aan uw project hebt toegevoegd, merkt u mogelijk dat ze worden weergegeven in de klassenweergave van uw project. In de klasseweergave kunt u dubbelklikken op een klasse om de methoden van die klasse te zien en vervolgens dubbelklikt u op de methode om de definitie van die functie weer te geven in het implementatiebestand van de MFC-wrapper. U kunt de definitie van een lidfunctie controleren als u een retourtype wilt controleren of als u een implementatie van een functie moet wijzigen.

Hoewel de eerdere stappen laten zien hoe u Microsoft Excel kunt automatiseren, kunt u dezelfde ideeën toepassen om andere toepassingen te automatiseren. De volgende lijst bevat de bestandsnamen voor typebibliotheken van andere Microsoft Office-toepassingen:

| Toepassing| Typebibliotheek| |---|---| | Microsoft Access 97| Msacc8.olb| | Microsoft Jet Database 3.5|DAO350.dll| | Microsoft Binder 97| Msbdr8.olb| | Microsoft Excel 97| Excel8.olb| | Microsoft Graph 97| Graph8.olb| | Microsoft Office 97|Mso97.dll| | Microsoft Outlook 97| Msoutl97.olb| | Microsoft PowerPoint 97| Msppt8.olb| | Microsoft Word 97| Msword8.olb| ||| | Microsoft Access 2000| Msacc9.olb| | Microsoft Jet Database 3.51|DAO360.dll| | Microsoft Binder 2000| Msbdr9.olb| | Microsoft Excel 2000| Excel9.olb| | Microsoft Graph 2000| Graph9.olb| | Microsoft Office 2000|Mso9.dll| | Microsoft Outlook 2000| Msoutl9.olb| | Microsoft PowerPoint 2000| Msppt9.olb| | Microsoft Word 2000| Msword9.olb | ||| | Microsoft Access 2002| Msacc.olb| | Microsoft Excel 2002|Excel.exe| | Microsoft Graph 2002|Graph.exe| | Microsoft Office 2002|MSO.dll| | Microsoft Outlook 2002| MSOutl.olb| | Microsoft PowerPoint 2002| MSPpt.olb| | Microsoft Word 2002| MSWord.olb| ||| | Microsoft Office Access 2003| Msacc.olb| | Microsoft Office Excel 2003|Excel.exe| | Microsoft Office Graph 2003|Graph.exe| | Microsoft Office 2003|MSO.dll| | Microsoft Office Outlook 2003| MSOutl.olb| | Microsoft Office PowerPoint 2003| MSPpt.olb| | Microsoft Office Word 2003| MSWord.olb| ||| | Microsoft Office Access 2007| Msacc.olb| | Microsoft Office Excel 2007|Excel.exe| | Microsoft Office Graph 2007|Graph.exe| | Microsoft Office 2007|MSO.dll| | Microsoft Office Outlook 2007| MSOutl.olb| | Microsoft Office PowerPoint 2007| MSPpt.olb| | Microsoft Office Word 2007| MSWord.olb| Opmerking De standaardlocatie voor dit type bibliotheken is:

| Office-versie| Pad| |---|---| | Office 97| C:\Program Files\Microsoft Office\Office| | Office 2000| C:\Program Files\Microsoft Office\Office| | Office XP| C:\Program Files\Microsoft Office\Office10| | Office 2003| C:\Program Files\Microsoft Office\Office11| |2007 Office| C:\Program Files\Microsoft Office\Office12| De standaardlocatie voor Dao350.dll en Dao360.dll is C:\Program Files\Common Files\Microsoft Shared\Dao.