This article illustrates, in detail, how to automate
component integration with COM-compliant applications such as the Microsoft
Office applications.
The following section illustrates how you can create an MFC
project. The example automates Microsoft Excel. You can use the first 8 steps
for any project, and modify steps 9 through 15 when you work with another
application.
Create an automation project
- With Microsoft Developer Studio, start a new "MFC AppWizard
(exe)" project named "AutoProject."
- In step 1 of the MFC AppWizard, choose "Dialog Based" for
the application type and then click Finish.
The New Project
Information dialog box appears and indicates that the Classes to be created
include:
Application: CAutoProjectApp in AutoProject.h and AutoProject.cpp
Dialog: CAutoProjectDlg in AutoProject.h and AutoProjectDlg.cpp
Click OK to create the project. - The Dialog box "IDD_AUTOPROJECT_DIALOG" opens in the Visual
Studio design/edit area. Modify it according to the instructions in the next
two steps.
- Remove the Label control (IDC_STATIC) and the Cancel button
(IDCANCEL).
- Change the name of the OK button to "IDRUN" and the caption
to "Run." Close the AutoProject.rc dialog box design form.
- Click ClassWizard on the View menu (or press CTRL+W).
- Select the Message Maps tab. Select IDRUN in the Object Ids
list box and select "BN_CLICKED" in the Messages list box. Click Add Function
and accept the function name "OnRun". Click OK to close the ClassWizard.
NOTE: This step adds a declaration for the function member
"OnRun();" to the header file named AutoProjectDLG.h. This step also adds an
empty skeleton message handler function named CAutoProjectDlg::OnRun() to the
file named AutoProjectDLG.cpp. - Click ClassWizard on the View menu (or press CTRL+W).
- Select the Automation tab. Click Add Class and choose "From
a type library." Navigate to select the object library for the application you
wish to automate (for this example, if you are automating Excel 97, choose the
Microsoft Excel 8.0 Object Library; the default location is C:\Program
Files\Microsoft Office\Office\Excel8.olb).
If you are automating
Microsoft Excel 2000, choose Microsoft Excel 9.0 Object Library for which the
default location is the C:\Program Files\Microsoft Office\Office\Excel9.olb.
If you are automating Microsoft Excel 2002 and Microsoft Office Excel 2003, the
object library is embedded in the file Excel.exe. The default location for
Excel.exe in Office 2002 is C:\program Files\Microsoft
Office\Office10\Excel.exe. The default location for Excel.exe in Office 2003 is
C:\program Files\Microsoft Office\Office11\Excel.exe. Once you have selected
the appropriate object library, click Open. Select all classes in the Confirm
Classes list, and then click OK.
NOTE: The list box in the Confirm
Classes dialog box contains all of the IDispatch interfaces (which are
virtually identical to classes) in the Microsoft Excel type library. In the
lower half of the dialog box you will see that an Implementation file named
Excel8.cpp contains generated class wrappers derived from ColeDispatchDriver(),
and the appropriate declaration header file is named Excel8.h. (For Excel 2002
and Excel 2003, the files are named Excel.cpp and Excel.h.) - Click OK to close the MFC ClassWizard dialog box.
- Add the following code to the
CAutoProjectApp::InitInstance() function, which loads and enables the COM
services library:
BOOL CAutoProjectApp::InitInstance()
{
if(!AfxOleInit()) // Your addition starts here
{
AfxMessageBox("Could not initialize COM dll");
return FALSE;
} // End of your addition
AfxEnableControlContainer();
.
.
.
}
- Add the following line to the #include statements at the
top of the AutoProject.cpp program file:
- Add the include statement for excel8.h after the include
statement for stdafx.h at the top of the AutoProjectDlg.cpp program file:
#include "stdafx.h"
#include "excel8.h" // excel.h in the case of Excel 2002 and Excel 2003.
- Add automation code to the CAutoProjectDlg::OnRun() so that
it appears as shown below:
void CAutoProjectDlg::OnRun()
{
_Application app; // app is the Excel _Application object
// Start Excel and get Application object...
if(!app.CreateDispatch("Excel.Application"))
{
AfxMessageBox("Couldn't start Excel.");
}
else
{
//Make Excel Visible and display a message
app.SetVisible(TRUE);
AfxMessageBox ("Excel is Running!");
}
}
- Build and run the project. RESULTS: When you click the Run
button in the dialog box, Microsoft Excel will be launched. Activate the
Auto_Excel dialog box and dismiss the message box. Microsoft Excel will quit
when the CAutoProjectDlg::OnRun() function ends because the application
variable will have gone out of scope.
Additional Notes
Once you have added the classes from a type library to your
project (as you did in step 9 above), you will notice that many classes have
been added to the project. In ClassView, you can double-click a class to see
the member functions of that class and then double-click the member function to
view the definition of that function in the Excel8.cpp implementation file.
You need to go to the definition of a member function if you wish to
verify a return type or if you need to change a function's implementation. Any
time you change a function definition, remember to change the declaration in
the Excel8.h file. When doing so, be sure that you change the correct function
declaration; sometimes, the same name is given to member functions of multiple
classes--GetApplication() is one such example.
Although the steps
above illustrate how to automate Microsoft Excel, you can apply the same ideas
to automating other applications. The list below contains the file names for
the type libraries of the Microsoft Office applications:
Application Type Library
--------------------------------------------------
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 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
NOTE: The default location for these type libraries is C:\Program
Files\Microsoft Office\Office (for Office 2002 the path is C:\...\Office10 and
for Office 2003 the path is C:\...\Office11), except for Dao350.dll or
Dao360.dll, and Microsoft Office 10(MSO.dll). The default location for
Dao350.dll/Dao360.dll is C:\Program Files\Common Files\Microsoft Shared\Dao.
The default location for MSO.dll is C:\Program Files\Common Files\Microsoft
Shared\Office10 for Office 2002 and C:\Program Files\Common Files\Microsoft
Shared\Office11 for Office 2003.
This article presents a specific approach to building a
dialog-box project. If you would like to see more general documentation about
the process of building a VC++ project in the Microsoft Developer Studio
environment, there is an excellent tutorial you can access by using Visual
Studio InfoView. To access the tutorial, click Search on the Help menu. Click
the index tab and type the following:
working with projects
Click List Topics. Select the topic "Home Page: Working With
Projects" and click Display.
For more information about the automation of Office applications, click the following article number to view the article in the Microsoft Knowledge Base:
222101
(http://support.microsoft.com/kb/222101/
)
How to find and use Office object model documentation
Article ID: 178749 - Last Review: June 23, 2005 - Revision: 4.3
APPLIES TO
- Microsoft Foundation Class Library 4.2, when used with:
- Microsoft Visual C++ 5.0 Standard Edition
- Microsoft Visual C++ 6.0 Service Pack 5
- Microsoft Office XP Developer Edition
- Microsoft Office 2000 Developer Edition
| kbautomation kbhowto kbinterop KB178749 |