Automation and COMAutomation is based on the Component Object Model (COM). COM is a standard software architecture based on interfaces, and designed to separate code into self-contained objects. Think of it as an extension of the Object Oriented Programming (OOP) paradigm, but applicable to separate applications. Each object exposes a set of interfaces, and all communication to an object, such as initialization, notifications, and data transfer, happens through these interfaces.
COM is also a set of services provided by dynamic-link libraries (DLLs) installed with the operating system. Automation uses many of those services. One example is the "Marshalling" service, which packages the client application's calls to the member functions of the server application's interfaces, and passes those with their arguments to the server application. The server's interfaces appear to be exposed in the client's memory space, which is not the case when the client is an .exe file running in its own process space. Marshalling also gets the return values from the server's methods back across the process boundaries and safely into the hands of the client's call.
There are many other services essential to Automation that are provided by the various COM libraries. Sources of information about those include:
- Inside OLE - Second Edition" by Kraig Brockschmidt, ISBN 1-55615-843-2
- Inside COM" by Dale Rogerson - ISBN 1-57231-349-8
- Automation Programmer's Reference," ISBN 1-57231-584-9
Three Ways to Use Automation from Visual C++There are three basic ways you can use Automation: MFC, #import, and C/C++:
- With MFC, use the Visual C++ ClassWizard to generate "wrapper classes" from the Microsoft Office type libraries. These classes, as well as other MFC classes, such as COleVariant, COleSafeArray, and COleException, simplify the tasks of Automation. This method is usually recommended over the others, and most of the Microsoft Knowledge Base examples use MFC.
- #import, a new directive that became available with Visual C++ 5.0, creates VC++ "smart pointers" from a specified type library. It is very powerful, but often not recommended because of reference-counting problems that typically occur when used with the Microsoft Office applications.
- C/C++ Automation is much more difficult, but sometimes necessary to avoid overhead with MFC, or problems with #import. Basically, you work with such APIs as CoCreateInstance(), and COM interfaces such as IDispatch and IUnknown.
How to use the Office Type LibrariesA type library is similar to a C/C++ header file. It contains the interfaces, methods, and properties that a server is publishing. You can view the type library with the OLE/COM Object Viewer (Oleview.exe) that comes with Visual C++. Following is a list of the type library file names for Microsoft Office 95, Microsoft Office 97, Microsoft Office 2000, Microsoft Office XP, Microsoft Office 2003, and 2007 Microsoft Office.
|Office Application||Type library|
|Word 95 and prior||wb70en32.tlb|
|Excel 95 and prior||xl5en32.olb|
|PowerPoint 95 and prior||PowerPoint.tlb|
|Access 95 and prior||msaccess.tlb|
|Office Word 2003||msword.olb|
|Office Excel 2003||excel.exe|
|Office PowerPoint 2003||msppt.olb|
|Office Access 2003||msacc.olb|
|Office Outlook 2003||msoutl.olb|
|Office Word 2007||msword.olb|
|Office Excel 2007||excel.exe|
|Office PowerPoint 2007||msppt.olb|
|Office Access 2007||msacc.olb|
|Office Outlook 2007||msoutl.olb|
To do this in the 2007 Office programs, follow these steps:
- Show the Developer tab. To do this, click the Microsoft Office Button, click program Options, click Popular, click to select the Show Developer tab in the Ribbon check box, and then click OK.
- Click the Developer tab.
- In the Code group, click Record Macro, and then perform the task in which you are interested.
- In the Code group, click Stop Recording.
- As soon as you are finished recording, click Macros in the Code group, click the macro that you recorded, and then click Edit.
- On the Tools menu, point to Macro, click Record New Macro, and then perform the task in which you are interested.
- On the Tools menu, point to Macro, and then click Stop Recording.
- As soon as you are finished recording, point to Macro on the Tools menu, click Macros, click the macro that you recorded, and then click Edit.
Automating an Embedded Office ComponentTo automate an embedded Office object or application, you need to get the object's IDispatch pointer. This is given in the Visual C++ Technical Note 39 (TN039). You can find this technical note in the Microsoft Foundation Class Library of the Visual C++ Reference. For a step-by-step example, please click the article number below to view it in the Microsoft Knowledge Base:
For more information, click the following article number to view the article in the Microsoft Knowledge Base:
ID do Artigo: 238972 - Última Revisão: 23 de mar de 2009 - Revisão: 1