═══ 1. About this Book ═══ This manual describes the IBM VisualAge C++ for OS/2 product (referred to as VisualAge C++), its components, available documentation, as well as service and support. The VisualAge C++ components give you the ability to edit, compile, link, debug, analyze and browse C and C++ programs on the 32-bit Operating System/2 (OS/2) system. This manual is for application and systems programmers who want an overview of IBM VisualAge C++ for OS/2. It assumes you have a working knowledge of the C and C++ programming languages, the OS/2 operating system, and related products. Before you begin to use this information, it would be helpful to understand how to navigate through it. You can use the Table of Contents and Index facility to locate topics and the Search facility to search the text of this document. You can use hypertext links to acquire related information on the current topic. Hypertext links appear in a different color (which you can customize using the OS/2 Scheme Palette). For example, here is a link to another panel: Communicating Your Comments to IBM. By double-clicking on the text of the link or by pressing Enter on a highlighted link, you will open a panel of related information. When you open a panel, the first link has the focus; to shift the focus to other links, use the Tab key. You should also understand:  How to Use the Contents  How to Obtain Additional Information  How to Use Action Bar Choices  How to Cut and Paste Examples ═══ 1.1. Notices ═══ Copyright International Business Machines Corporation, 1995. All rights reserved. Note to U.S. Government Users - Documentation related to restricted rights - Use, duplication, or disclosure is subject to restrictions set forth in GSA ADP Schedule Contract with IBM Corp. First Edition, May 1995. This edition applies to Version 3.0 of IBM VisualAge C++ for OS/2 (30H1664, 30H1665, 30H1666) and to all subsequent releases and modifications until otherwise indicated in new editions. Make sure you are using the correct edition for the level of the product. This publication could include technical inaccuracies or typographical errors. Changes are periodically made to the information herein; any such changes will be reported in subsequent revisions. Requests for publications and for technical information about IBM products should be made to your IBM Authorized Dealer or your IBM Marketing Representative. When you send information to IBM, you grant IBM a nonexclusive right to use or distribute the information in any ways it believes appropriate without incurring any obligation to you. Any reference to an IBM licensed program in this publication is not intended to state or imply that only IBM's licensed program may be used. Any functionally equivalent product, program, or service that does not infringe any of IBM's intellectual property rights may be used instead of the IBM product, program, or service. Evaluation and verification of operation in conjunction with other products, except those expressly designated by IBM, is the user's responsibility. IBM may have patents or pending patent applications covering subject matter in this document. The furnishing of this document does not give you any license to these patents. You can send license inquiries, in writing, to the IBM Director of Licensing. IBM Corporation, 500 Columbus Avenue, Thornwood, NY, 10594, USA. This publication contains examples of data and reports used in daily business operations. To illustrate them as completely as possible, the examples include the names of individuals, companies, brands, and products. All of these names are fictitious and any similarity to the names and addresses used by an actual business enterprise is entirely coincidental. ═══ 1.2. Trademarks and Service Marks ═══ The following terms used in this publication are trademarks or service marks of IBM Corporation in the United States or other countries: BookManager C Set ++ Common User Access CUA IBM Operating System/2 OS/2 Personal System/2 Presentation Manager PS/2 SOM System Object Model VisualAge WorkFrame/2 Workplace Shell Windows is a trademark of Microsoft Corporation. Other company, product, and service names, which may be denoted by a double asterisk(**), may be trademarks or service marks of others. ═══ 1.3. How to Use the Contents ═══ When the Contents window first appears, some topics have a plus (+) sign beside them. The plus sign indicates that additional topics are available. To expand the Contents if you are using a mouse, click on the plus sign. If you are using the keyboard, use the Up or Down Arrow key to highlight the topic, and press the plus (+) key. For example, How to Use the Contents has a plus sign beside it. To see additional topics for that heading, click on the plus sign or highlight that topic and press the plus (+) key. To view a topic, double-click on the topic (or press the Up or Down Arrow key to highlight the topic, and then press the Enter key). ═══ 1.4. How to Obtain Additional Information ═══ After you select a topic, the information for that topic appears in a window. Highlighted words or phrases indicate that additional information is available. Certain words and phrases are highlighted in a different color from the surrounding text. These are called hypertext terms. If you are using a mouse, double-click on the highlighted word. If you are using a keyboard, press the Tab key to move to the highlighted word, and then press the Enter key. Additional information then appears in a window. ═══ 1.5. How to Use Action Bar Choices ═══ Several choices are available for managing the information presented in this document. There are three menus on the action bar: the Services menu, the Options menu, and the Help menu. The actions that are selectable from the Services menu operate on the active window currently displayed on the screen. These actions include the following: Placing Bookmarks You can set a placeholder so you can retrieve information of interest to you. Searching for Information You can find occurrences of a word or phrase in the current topic, selected topics, or all topics. Printing Information You can print one or more topics. You can also print a set of topics by first marking the topics in the Contents list. Copying Information to a File You can copy a topic that you are viewing to the System Clipboard or to a file that you can edit. This method is particularly useful for copying syntax definitions and program samples into the application that you are developing. Using the actions that are selectable from the Options menu, you can change the way your Contents list is displayed. To expand the Contents and show all levels for all topics, choose Expand all from the Options pull-down. You can also press the Ctrl and * keys together. The actions that are selectable from the Help menu allow you to select different types of help information. For information about any of the menu choices, highlight the choice in the menu and press F1. ═══ 1.5.1. Placing Bookmarks ═══ When you place a bookmark on a topic, it is added to a list of bookmarks you have previously set. You can view the list, and you can remove one or all bookmarks from the list. If you have not set any bookmarks, the list is empty. To set a bookmark, do the following: 1. Select a topic from the Contents. 2. When that topic appears, select the Bookmark option from the Services menu. 3. If you want to change the name used for the bookmark, type the new name in the field. 4. Click on the Place radio button (or press the Up or Down Arrow key to select it). 5. Click on OK (or select it and press Enter). The bookmark is then added to the bookmark list. ═══ 1.5.2. Searching for Information ═══ You can specify a word or phrase to be searched. You can also limit the search to a set of topics by first marking the topics in the Contents list. To search for a word or phrase in all topics, do the following: 1. Select the Search option from the Services menu. 2. Type the word or words to be searched for. 3. Click on All sections (or press the Up or Down Arrow keys to select it). 4. Click on Search (or select it and press Enter) to begin the search. 5. The list of topics where the word or phrase appears is displayed. ═══ 1.5.3. Printing Information ═══ You can print one or more topics, the index, or the table of contents. Make sure that your printer is connected to the serial port, configured correctly, and ready for input. To print: 1. Select Print from the Services pull-down. 2. Select what you want to print. Note that the This section and Marked sections choices are only available if you are viewing a topic or if you have marked topics, respectively. To mark topics in the table of contents, press the Ctrl key and click on the topics, or use the arrow keys. 3. Select Print to print what you've chosen on your printer. ═══ 1.5.4. Copying Information to a File ═══ You can copy a topic that you are viewing in two ways:  Copy copies the topic that you are viewing into the System Clipboard. If you are using a Presentation Manager (PM) editor (for example, the Enhanced Editor) that copies or cuts (or both) to the System Clipboard, and pastes to the System Clipboard, you can easily add the copied information to your program source module.  Copy to file copies the topic that you are viewing into a temporary file named TEXT.TMP. You can later edit that file by using any editor. TEXT.TMP is placed in the directory where your viewable document resides. To copy a topic, do the following: 1. Expand the Contents list and select a topic. 2. When the topic appears, select Copy to file from the Services menu. 3. The system puts the text pertaining to that topic into the temporary file TEXT.TMP. ═══ 1.6. How to Cut and Paste Examples ═══ You can copy examples (or information) from this reference/guide/book to compile, link, and run them, or to paste them into your own code. To copy an example or information: 1. Make the topic you want to copy the active window. 2. From the Services menu, select Copy to file. The text in that topic is placed in the temporary file TEXT.TMP, in the same directory as this reference. 3. You can then modify or use TEXT.TMP as you want. Note: Because the system copies the entire contents of the topic to the file, you may need to edit it to remove additional text. ═══ 1.7. Other Information You Might Find Helpful ═══ This product provides a number of online guides and references that we hope you'll find helpful as you develop applications. This information includes User's Guides, References, and How Do I help that gives you specific instructions for performing common tasks. You can get to this online information from the Information folder inside the main product folder. You can also get to it from the Help menu in any of the components of the product. ═══ 1.8. Communicating Your Comments to IBM ═══ If there is something you like, or dislike, about this book, please let us know. You can use one of the methods listed below to send your comments to IBM. Please be sure to include the complete title of the publication that you are commenting on. The comments you send should only pertain to the information in this document and its presentation. To request additional publications or to ask questions or make comments about the functions of IBM products or systems, you should talk to your IBM representative or you authorized IBM remarketer. When you send comments to IBM, you grant IBM a nonexclusive right to use or distribute your comments in any way it believes appropriate without incurring any obligation to you. You can send your comments to IBM in the following ways:  By mail to the following address: IBM Canada Ltd. Laboratory Information Development 2G/345/1150/TOR 1150 EGLINTON AVENUE EAST NORTH YORK, ONTARIO CANADA M3C 1H7  By FAX to the following number: - United States and Canada: (416) 448-6161 - Other countries (+1) 416-448-6161  By electronic mail to one of the following IDs. Be sure to include your entire network address if you wish to get a reply. - Internet: torrcf@vnet.ibm.com - IBMLink: toribm(torrcf) - IBM/PROFS: torolab4(torrcf) - IBMMAIL: ibmmail(caibmwt9 ═══ 2. Introducing IBM VisualAge C++ for OS/2 ═══ IBM VisualAge C++ for OS/2 is a comprehensive and powerful C/C++ development package for OS/2 programming. This new, OS/2 Warp-enabled release supports the development of C and C++ applications through a full set of tools. The browser, editor, compiler, linker, debugger, performance analyzer, visual builder, and database access tools work together as an integrated set of tools. These powerful, graphical tools are designed to help you as you progress through the development cycle of your application. Each of the components is described in this online book. To use the VisualAge C++ product with a sample WorkFrame project and a simple example, double-click on the Welcome to VisualAge C++ overview icon in the VisualAge C++ folder. ═══ 2.1. VisualAge C++ Components ═══ This new version of VisualAge C++ includes a variety of components in an integrated environment designed to support the development of C and C++ applications, These components are:  To help you get started - Project Smarts - a set of pre-configured projects to start the more common development tasks - WorkFrame - a fully-configurable environment that allows the integration of multiple tools  To help you code and edit - Visual Builder constructs entire applications, complete with windows, menu bars, entry fields, and icons - Data Access Builder visually allows you to create C++ classes for easy access to DB2/2 relational databases - IBM Open Class Library incorporates a rich and comprehensive set of building blocks - The Browser provides fast and easy access to source program information - The Editor is a powerful, language-sensitive C++ editor.  To help you compile and link - The Compiler and Linker generate highly optimized 32-bit code - Direct-to-SOM (DTS) support provides a fast, simple way to create high quality SOM objects.  To help you test and debug - The Debugger helps you find and fix errors fast. - The Performance Analyzer helps you time and tune your application ═══ 2.2. To Start ═══ The following VisualAge C++ components help you to start developing applications.  Project Smarts - Create Pre-Configured Projects  WorkFrame - Customize Your Development Environment ═══ 2.2.1. Project Smarts - Create Pre-Configured Projects ═══ Project Smarts is a tool to help you quickly get started writing VisualAge C++ applications. It is a catalog of skeletal applications you can use as a base from which to write your own applications. Project Smarts catalog To use Project Smarts, find the Project Smarts icon in the VisualAge C++ folder and double-click on it to open the Project Smarts catalog. It contains a list of common applications, including:  C Dynamic Link Library  C++ Dynamic Link Library  Data Access Application  Direct-to-SOM Application  IPF Context-Sensitve Help  IPF Document.  Presentation Manager Application  Resource Dynamic Link Library  UI Class Library Application  Visual Builder Application  Workplace Shell Application Select an application, click on the Create pushbutton, and Project Smarts creates a fully-configured, development-ready project on your desktop. A project represents the complete set of data and actions that you need to build a single target, such as a dynamic link library (DLL) or executable file (EXE). All the actions, options, and environment variables you need to develop a similar application are preconfigured for you. Each project is created with template source files to get started quickly on the real work, without having to set up the basics every time. Project Smarts applications are skeletal, but running, programs. A Project Smarts application is distinct from a sample project; it does not teach you programming techniques or concepts. The code provides a starting point for you to build on when developing your own applications from the code templates. ═══ 2.2.2. WorkFrame - Customize Your Development Environment ═══ WorkFrame is a fully configurable and open integrating environment that lets you mix and match your favorite tools with the ones provided by VisualAge C++. In this way you can create and customize your personal development environment. WorkFrame gives you the flexibility to work with your files and perform project actions that are most effective for you. For example:  Use the Build Smarts dialog to quickly switch between the most common build options. Through a single dialog you specify whether you want to optimize, debug, browse, or analyze your code. Build Smarts temporarily increments your existing compiler and linker options to build the project the way you requested. Because Build Smarts does not change the compile and link options you may have specifically defined for the project, you can still perform your customized compile, link, make or build operations through WorkFrame dialogs.  You are given a variety of menu choices. WorkFrame provides a menu bar and a tool bar in each project window (similar to conventional integrated development environments). If you prefer direct manipulation, you can use popup menus and drag and drop capability to start actions or change options.  You can launch actions defined in a project from a single VisualAge C++ tool. For example, if you are editing source files, you can build the project from the editor. When the project builds cleanly, you can start the debugger (or any other VisualAge C++ tool) from the editor. ═══ 2.3. To Code and Edit ═══ The following VisualAge C++ components help you to code and edit:  Visual Builder - An Object-Oriented Visual Application Builder  Data Access Builder - Build Classes to Access Relational Data  VisualAge Browser - Fast, Easy Access to Program Information  VisualAge Editor - A Powerful Language-Sensitive Editor  IBM Open Class Library - A Comprehensive Set of Building Blocks ═══ 2.3.1. Visual Builder - An Object-Oriented Visual Application Builder ═══ Visual Builder is a visual programming tool that can help you create object-oriented applications using the C++ programming language. Visual Builder gets you started by providing a set of parts as well as interactive visual programming tools to work with those parts. You create your applications by visually assembling and connecting these prefabricated parts. Visual programming with Visual Builder consists primarily of: 1. Creating a graphical user interface (GUI) from parts using the Composition Editor, and, parts supplied by Visual Builder, parts that you create, or both 2. Connecting the parts so that they interact with each other properly 3. Generating C++ code using Visual Builder's code generator. You can extend Visual Builder by adding your own reusable, custom parts and then using these parts in your applications as you need them. You can also import or export these parts from other applications. The parts are treated as classes by Visual Builder. By developing a library of your own unique parts, tailored to the special requirements of your business, even large and complex applications can be created by visually arranging and connecting parts. ═══ 2.3.2. Data Access Builder - Build Classes to Access Relational Data ═══ The Data Access Builder allows you to create new object-oriented database applications quickly and reliably by generating the source code and embedded SQL for you. Add, update, delete, and retrieve methods are generated for each class. These database parts can be used directly in your programs, or you can import them into Visual Builder. By using Visual Builder to connect them to the GUI, or other parts, you can create high quality applications quickly. Some of the key features of Data Access Builder are:  Map tables to classes. Create new classes using your existing database tables. You can create one class, or many classes, from any table. Both C++ and SOM IDL code are supported.  Quick or custom mapping. The Data Access Builder offers a quick map feature that allows you to do a column-to-attribute mapping. By using inheritance,users are able to customize their classes to suit their needs.  Visual display of your mapping. The Data Access Builder graphically displays the mapping of your database tables to the object classes. This view allows visual editing and uses icons for tables, classes, and arrows to show the mappings.  Connection and transaction services. Separate services are provided for connection and disconnection from your databases. In addition, commit and rollback operations are provided to handle transaction services.  DB2 Family support. Access DB2/2 in a standalone environment or access DB2 through the DB2 Client Application Enabler. ═══ 2.3.3. VisualAge Browser - Fast, Easy Access to Program Information ═══ The Browser is a tool that lets you examine programs developed in VisualAge C++ that use large and complex collections of interrelated classes in class libraries. Graph window showing all base and derived classes of IControl class The Browser lets you look at your source code in many different ways. You can:  List program objects by type (for example, all classes), by content (members of a class), or by components (all files)  View relationships between program components graphically, such as class inheritance hierarchies, function calls, and included files  View and edit the actual source code associated with a selected program element using your default editor  View online documentation for a class or class member. That is, if you select a class or class member, you can directly access the reference manual entry for that class or class member. The Browser allows you to view your program either after compilation or by using QuickBrowse from within the Browser. The graphical user interface consists of two types of Browser windows:  A List window displays a list of program elements such as source files, functions, and classes  A Graph window displays program relationships in a graphical format, for example, all nodes in a class hierarchy. You can specify the level of detail you want the graph to show, scroll over the graph, zoom in and out, and select program elements directly from the graph. ═══ 2.3.4. VisualAge Editor - A Powerful Language-Sensitive Editor ═══ A new editor has been integrated into VisualAge C++. The Editor lets you build, debug, browse, make, or issue other VisualAge C++ commands directly from your editing session. The Project Pulldown Menu in the Editor It performs all the common editing tasks such as insert, delete, split and join lines, find, block, and manipulate text, or undo changes, create and find marks, and move between different source views. In addition, to make programming simpler and error free:  It is language sensitive. It highlights in different fonts and colors for different types of language constructs. Automatic indenting is provided. It dynamically performs simple lexical error checking. You can check your work by quickly navigating through each error without having to compile or leave the editor.  The editor helps you to review and understand the code by presenting several views of the source. For example, you can display the function headers in the file to quickly see what is in the file and locate a function of interest. You can also display the program's flow of control, or insert programming templates.  The editor is fully customizable. You can: - Change key assignments - Write external commands to extend editor capability - Create additional parsers - Configure the tool bar - Select a personality. It supports the look and feel of many common editors, such as the OS/2 editor EPM.  You can record a sequence of keyboard events as an LPEX REXX command and then modify it to be reused as an external command. For more information about the using the VisualAge Editor, refer to the Editor chapter in the VisualAge C++ User's Guide. ═══ 2.3.5. IBM Open Class Library - A Comprehensive Set of Building Blocks ═══ The IBM Open Class Library provides you with a variety of building blocks to use in your C++ programs. Many of the fundamental components of C++ applications have been provided as reusable, extensible classes. IBM Open Class helps you reduce your programming effort and avoid coding errors by providing a comprehensive set of classes, from basic input/output operations and string handling, through abstract data types and user interface support. The class libraries are:  Collection Classes  User Interface Classes  Application Support Classes  Standard Classes ═══ 2.3.5.1. Collection Classes ═══ The Collection Classes offer a complete set of abstract data types such as sequences, sets, bags, and trees. These classes help to reduce errors and simplify the task of standardizing the format of data when designing programs or passing data between modules. The Collection Classes deliver:  A choice of several underlying implementations are each optimized for different requirements: array, linked list, hash table, AVL tree, and B*-tree. Since these implementations provide the same programming interface, as you tune the performance of your application, you can select the best underlying implementation for the same data type abstraction without changing your source code.  Completeness of abstract data types. For instance, all abstract data types have complete sorted and keyed versions.  Flexible parameterization. You can implement your own memory manager.  Flexible definition of element operations. Default equality and and comparison operators can be overridden with your own definition. ═══ 2.3.5.2. User Interface Classes ═══ The User Interface Classes provide a comprehensive set of classes for programming graphical user interfaces on OS/2, AIX, and Windows. These classes simplify the coding of GUI applications and result in a more portable, reusable object-oriented user interface. IBM Open Class gives you a consistent way to write user interface code without having to program to the low-level system APIs. IBM Open Class exploits the underlying operating system services. For example, the user interface classes exploit Motif services on AIX and Presentation Manager services on OS/2. The User Interface Classes let you:  Create and display windows using title bars, varying sizes and styles  Include controls such as menus, buttons, text, list boxes, sliders, notebooks, and containers, withnew support for animated pushbuttons  Draw canvases with flexible window layouts that allow automatic redrawing and aligning of cells independent of the display device  Provide direct manipulation (drag and drop) support  Add multimedia with classes for constructing many different devices like a midi sequencer, wave file playing and editing, digital video players and recorders, programmable CD players, amplifier and mixer, and the master audio control  Provide 2-D graphics support for drawing primitives (lines and arcs) plus support for reading and displaying various graphic formats, such as GIF, PIF, BMP, and others  Create and manage a tool bar, including being able to move, change, and resize it  Create parts, using the parts notification framework, for Visual Builder  Communicate between OS/2 applications running on the same machine using Dynamic Data Exchange (DDE)  Display help, define contextual help, and handle help keys, plus new fly-over help that comes up automatically when the mouse pointer is on an object  Cut, copy, and paste to and from the clipboard. You can use all of these classes as provided or extend and tailor them, combine them with other class libraries to develop complete object-oriented applications. ═══ 2.3.5.3. Application Support Classes ═══ The Application Support Classes provide the basic abstractions required during the creation of most C++ applications, including:  String manipulation classes  Date and time classes  Error handling and trace classes. The string classes define a data type for strings and provide member functions that let you perform a variety of data manipulation and management activities. They provide capabilities beyond those available with standard C strings in the string.h library functions. The string classes have the following capabilities:  String buffers are handled automatically  Strings can contain both SBCS and MBCS characters  Strings can be indexes by character or by word  Strings can contain null characters (there are no restrictions on the contents of a string object). The string class members allow you to:  Use strings in input and output  Access information about strings  Compare strings  Test the characteristics os strings  Search for characters or words within a string  Manipulate and edit strings  Convert strings to and from numeric types  Format strings by adding or removing white space. The date and time classes provide you with data types to store and manipulate date and time information. With these classes you can create date and time objects, and use member functions to do the following:  Write date and time objects to an output stream  Access detailed information about dates or times  Compare dates or times  Add or subtract days from a date, or hours, minutes, or seconds from a time  Convert between date formats or time formats. The exception classes provide the framework for throwing exceptions within the class libraries. The trace class helps in tracing exceptions. ═══ 2.3.5.4. Standard Classes ═══ The Standard Classes consist of the standard I/O Stream library and the Complex library. The I/O Stream Library provides you with the facilities to deal with many varieties of C++ input and output. You can derive classes from this library to customize the input and output facilities for your own particular needs. The Complex Library gives you the capability to manipulate complex (imaginary) numbers and perform standard mathematical operations on them. ═══ 2.4. To Compile and Link ═══ VisualAge C++ provides the following components to help you compile and link:  VisualAge Compiler and Linker - Generate Highly-Optimized 32-bit Code  Direct-to-SOM (DTS) Support - Create High Quality SOM Objects ═══ 2.4.1. VisualAge Compiler and Linker - Generate Highly-Optimized 32-bit Code ═══ The Compiler and Linker generate highly optimized C and C++ code and make efficient use of disk and memory space. To produce the most efficient code possible, VisualAge C++ uses such advanced optimization techniques as:  Instruction scheduling  Code hoisting  Global register allocation  User code inlining  Intermodule optimizations. Code can be optimized for any Intel architecture processor from the i386 to the Pentium. New memory management algorithms in the C and C++ runtimes make efficient use of memory to reduce the amount of memory overhead in your programs. If you need to minimize how much disk space your application uses, the compiler has a new minimize size option. While generating code for debugging, disk space can also be saved with the new set of debug support options. This can reduce the size of debug-ready executables without the loss of debug information. Also, the line number only debugging support offers the option of a lower level of debug support with almost no increase in executable size. In addition, linker optimization options improve resolution of function and member function calls. These options can significantly reduce the size of your application files. The VisualAge C++ compiler and linker are fast and highly usable. Compile time has been improved, especially with the use of improved precompiled headers. The new 32-bit linker with automatic template resolution (without prelinking) improves link time over that of the previous linker (LINK386). It also supports most of the options of the previous linker with the new linker options. ═══ 2.4.2. Direct-to-SOM (DTS) Support - Create High Quality SOM Objects ═══ Direct-to-SOM (DTS) is a standard for implementing flexible and reusable objects, supported by the tools of VisualAge C++. DTS combines standard C++ syntax with IBM's System Object Model (SOM). With VisualAge C++ you generate SOM objects directly from the C++ compiler by turning on a compiler option. The compiler generates the corresponding Interface Definition Language (IDL) for use in interlanguage or Distributed SOM (DSOM) applications. The VisualAge C++ Browser shows SOM objects in a different color than a C++ object. The Data Access Builder has options to generate SOM classes (or IDL code). The VisualAge C++ Debugger provides debug support for SOM objects. SOM improves your C++ programming productivity:  Release to release binary compatibility removes the dependency between the code that implements a class and the code that uses it. This compatibility allows you to create and deploy a new version of a class, with added function or data members, and with inheritance from new base classes, without the need to recompile unchanged code. By packaging your SOM class in a DLL, you can replace the existing DLL with the new one, and all applications that use it will continue to run.  Extensive dynamic facilities let you query properties of objects and classes, and the use of the classes and methods whose names are not known until execution time. Applications can be extended by incrementally installing new applications that the application is told about through a configuration file or by user input.  Distributed SOM (DSOM) allows access to objects between processes, or across networks. With DTS you write C++ directly and this lets you use C++ features in your SOM classes that were not available before DTS. These features include templates, operators, constructors with parameters, default parameters, and static members. ═══ 2.5. To Test and Debug ═══ VisualAge C++ provides the following components to help you test and debug:  VisualAge Debugger - Find and Fix Coding Errors Fast  VisualAge Performance Analyzer - Time and Tune Your Code ═══ 2.5.1. VisualAge Debugger - Find and Fix Coding Errors Fast ═══ The Debugger is your primary tool for detecting and diagnosing coding errors. Program monitor and a debug source view The user interface gives you the ability to debug at the source level, as well as providing access to common debugger functions such as step, run, set breakpoints, monitor variables, display the call stack, display registers, and display storage. The Debugger provides the following built-in tools to help locate problems and fix code quickly:  The Window Analysis tool displays a three-dimensional view of all the windows your program creates, including the window characteristics and relationships  The Message Queue Monitor actively monitors Presentation Manager messages  C++ debugging features include template support, locate overloaded functions, class display, and debugging code in include files  Automatic heap checking to help isolate memory management problems by checking for memory overwriting each time your program starts executing. ═══ 2.5.2. VisualAge Performance Analyzer - Time and Tune Your Code ═══ The Performance Analyzer helps you time and tune your applications by collecting execution data in a trace file and presenting it in several graphical diagrams. Call Nesting diagram The trace file lets you :  See a detailed record of function calls and returns. Locate the areas within an application where a disproportionate amount of time is spent.  View the function call stack any place in the application to see the history of events leading up to the point the program stopped.  Determine multithread interactions and expose problems with critical sections by looking at the sequencing of procedures across threads. Using these diagrams, you can improve the performance of an application, examine what led to certain faults, and understand what happens when your application runs. ═══ 3. Bibliography ═══ This bibliography lists the publications that make up the IBM VisualAge C++ library and publications of related IBM products referenced in this book. The list of related publications is not exhaustive but should be adequate for most VisualAge C++ users. ═══ 3.1. The IBM VisualAge C++ Library ═══ The following books are part of the IBM VisualAge C++ library.  Read Me First!, S25H-6956  Welcome to VisualAge C++, S25H-6957  User's Guide, S25H-6961  Programming Guide, S25H-6958  Visual Builder User's Guide, S25H-6960  Visual Builder Parts Reference, S25H-6967  Building VisualAge C++ Parts for Fun and Profit, S25H-6968  Open Class Library User's Guide, S25H-6962  Open Class Library Reference, S25H-6965  Language Reference, S25H-6963-00  C Library Reference, S25H-6964 ═══ 3.2. The IBM VisualAge C++ BookManager Library ═══ The following documents are available in VisualAge C++ in BookManager format.  Read Me First!, S25H-6956  Welcome to VisualAge C++, S25H-6957  User's Guide, S25H-6961  Programming Guide, S25H-6958  Visual Builder User's Guide, S25H-6960  Visual Builder Parts Reference, S25H-6967  Building VisualAge C++ Parts for Fun and Profit, S25H-6968  Open Class Library User's Guide, S25H-6962  Open Class Library Reference, S25H-6965  Language Reference, S25H-6963-00  C Library Reference, S25H-6964 ═══ 3.3. C and C++ Related Publications ═══  Portability Guide for IBM C, SC09-1405  American National Standard for Information Systems / International Standards Organization - Programming Language C (ANSI/ISO 9899-1990[1992])  Draft Proposed American National Standard for Information Systems - Programming Language C++ (X3J16/92-0060) ═══ 3.4. IBM OS/2 2.1 Publications ═══ The following books describe the OS/2 2.1 operating system and the Developer's Toolkit 2.1.  OS/2 2.1 Using the Operating System, S61G-0703  OS/2 2.1 Installation Guide, S61G-0704  OS/2 2.1 Quick Reference, S61G-0713  OS/2 2.1 Command Reference, S71G-4112  OS/2 2.1 Information and Planning Guide, S61G-0913  OS/2 2.1 Keyboard and Codepages, S71G-4113  OS/2 2.1 Bidirectional Support, S71G-4114  OS/2 2.1 Book Catalog, S61G-0706  Developer's Toolkit for OS/2 2.1: Getting Started, S61G-1634 ═══ 3.5. IBM OS/2 3.0 Publications ═══  User's Guide to OS/2 Warp, G25H-7196-01 The following books make up the OS/2 3.0 Technical Library (G25H-7116).  Control Program Programming Guide, G25H-7101  Control Program Programming Reference, G25H-7102  Presentation Manager Programming Guide - The Basics, G25H-7103  Presentation Manager Programming Guide - Advanced Topics, G25H-7104  Presentation Manager Programming Reference, G25H-7105  Graphics Programming Interface Programming Guide, G25H-7106  Graphics Programming Interface Programming Reference, G25H-7107  Workplace Shell Programming Guide, G25H-7108  Workplace Shell Programming Reference, G25H-7109  Information Presentation Facility Programming Guide, G25H-7110  OS/2 Tools Reference, G25H-7111  Multimedia Application Programming Guide, G25H-7112  Multimedia Subsystem Programming Guide, G25H-7113  Multimedia Programming Reference, G25H-7114  REXX User's Guide, S10G-6269  REXX Reference, S10G-6268 ═══ 3.6. Other Books You Might Need ═══ The following list contains the titles of IBM books that you might find helpful. These books are not part of the VisualAge C++ or OS/2 libraries. ═══ 3.6.1. BookManager READ/2 Publications ═══  IBM BookManager READ/2: General Information, GB35-0800  IBM BookManager READ/2: Getting Started and Quick Reference, SX76-0146  IBM BookManager READ/2: Displaying Online Books, SB35-0801  IBM BookManager READ/2: Installation, GX76-0147 ═══ 3.6.2. Non-IBM Publications ═══ Many books have been written about the C++ language and related programming topics. The authors use varying approaches and emphasis. The following is a sample of some non-IBM C++ publications that are generally available. This sample is not an exhaustive list. IBM does not specifically recommend any of these books, and other C++ books may be available in your locality.  The Annotated C++ Reference Manual by Margaret A. Ellis and Bjarne Stroustrup, Addison-Wesley Publishing Company.  C++ Primer by Stanley B. Lippman, Addison-Wesley Publishing Company.  Object-Oriented Design with Applications by Grady Booch, Benjamin/Cummings.  Object-Oriented Programming Using SOM and DSOM by Christina Lau, Van Nostrand Reinhold.  OS/2 C++ Class Library: Power GUI Programming with C Set ++ by Kevin Leong, William Law, Robert Love, Hiroshi Tsuji, and Bruce Olson, John Wiley & Sons, Inc.