home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
VSCPPv1.zip
/
VACPP
/
README
< prev
next >
Wrap
Text File
|
1995-06-11
|
62KB
|
1,337 lines
IBM VisualAge C++ Version 3.0 for OS/2 - READ.ME
--------------------------------------------------
Welcome to VisualAge C++ for OS/2.
This file contains information you need to install VisualAge C++,
and additional information not included in the product documentation.
This README file is divided into the following categories:
- Before You Install
-Software Requirements
-Hardware Requirements
- Getting Help
-Documentation
-Service and Technical Support
-Defect Reporting
- Installing VisualAge C++
- Late-Breaking News
- Trademarks
- Your Satisfaction
Before You Install
-------------------
Software Requirements
---------------------
- OS/2 V2.11 or higher (OS/2 Warp recommended)
- To use Data Access Builder, DB2/2 V1.2 or higher
Hardware Requirements
---------------------
- Processor : 386 minimum (486 or higher strongly recommended)
(for 386 machines, a 387 coprocessor is highly
recommended for floating-point operations)
- Display : VGA minimum (SVGA recommended)
- RAM : C development - 8M minimum, 12M recommended
C++ development - 12M minimum, 16M recommended
visual C++ development - 16M minimum, 24M recommended
- Disk Space: 91MB for compiler and tools
102MB for samples and online information
30MB for swap space (minimum)
Getting Help
------------
Documentation
-------------
All VisualAge C++ information is available online in the Information
folder. With the CD-ROM package, BookManager books are also included;
read the README.ENG file on the CD-ROM for details. To order hardcopy
books, use the Publications Ordering card included in the product
package.
Service and Technical Support
-----------------------------
Telephone support in North America:
o Call 1-800-237-5511 to start your free 60-day Getting Started
period (GSP) for help with installation, usage, and how-to problems.
The 60-day period starts on the date of your first call, and is
offered 9-5 (in your time zone), Monday through Friday. If you
need service outside of these hours during the GSP, service charges
apply. You can also get details on the wide menu of service
options we offer after your 60-day GSP.
o For questions about CSD levels or availability, registration cards,
or beta tests, call 1-800-668-2853. Our automated response system
contains a wealth of information, much of which you can receive by
fax. The automated system is available 24 hours a day, 7 days a
week.
Telephone support outside North America:
o Call 416-448-4363 to contact the automated response system
described above.
o Contact your IBM branch for details on local country technical
support.
Electronic support - worldwide:
There is no charge for contacting VisualAge C++ support electronically,
other than what you normally pay for your electronic access.
o Compuserve: GO OS2DF1
o INTERNET : va_cpp@vnet.ibm.com
workframe@vnet.ibm.com for WorkFrame-specific questions
o IBMLink/ServiceLink: VA C++ forum
o TalkLink : VA C++ forum
If you frequent the Internet, you can also contact other knowledgeable
VisualAge C++ users on the USENET newsgroups. (VisualAge C++
discussions often appear in the comp.os.os2.programmer hierarchy.)
Defect Reporting
----------------
You can report possible VisualAge C++ code-related problems in several
different ways:
Electronically - worldwide:
There is no charge for contacting VisualAge C++ support electronically,
other than what you normally pay for your electronic access.
o CompuServe: 76711,611
o IBMLink/ServiceLink: ETR
o TalkLink : ETR
In North America:
o FAX : 1-800-426-8602
o MAIL: IBM Corp
Personal Systems Support Family
11400 Burnet Road
Internal Zip 2901
AUSTIN, TX 78758
Outside North America:
IBM in other countries also offer mail-in and fax support. Please
contact your local IBM branch for details.
Obtaining Fixes (CSDs)
----------------------
Fixes will be available for VisualAge C++ defects in the form of CSDs.
CSDs are cumulative, meaning the latest CSD contains all fixes from
earlier CSDs. You can obtain CSDs in the following ways:
o CompuServe: GO OS2DF1
Look in library 4
o Internet : anonymous ftp to software.watson.ibm.com
Look in the pub/os2/cset++ directory
o Developer's Connection for OS/2 (DevCon) CD-ROM:
VisualAge C++ CSDs will be put on the DevCon CDs that ship
after the CSDs are available. DevCon CDs prior to Volume 8
do not contain VisualAge C++ fixes; do not use VisualAge C++
components from DevCon CDs prior to Volume 8.
Installing VisualAge C++
-------------------------
You can find instructions for installing VisualAge C++ in the
Read Me First! booklet. The install command for a basic installation
is install. For a shared installation, the command is shrdinst.
For more details, please read the Read Me First! booklet.
Note: If you delete VisualAge C++ with the Installation Utility tool,
you must reboot before the deletion can be completed. If all files
are not deleted after you reboot, call EPFIDEFI.CMD from the
bootdrive\os2\system directory. Files that you created will not be
deleted.
Late-Breaking News
------------------
This section includes last-minute information about each component:
- WorkFrame
- Visual Builder
- Data Access Builder
- IBM Open Class Library
- Editor
- Compilers/Runtime Library
- Linker
- Browser
- Debugger
- Performance Analyzer
- Toolkit
The following items affect multiple components or the product as a whole.
1. In general, the online information is more current than the hardcopy
information.
2. The names of DLLs and libraries have been changed since C Set ++
Version 2.1 and the last beta of this product. For a description of
the new naming conventions, see the Programming Guide or Frequently
Asked Questions.
3. The invocation commands for some tools have changed. If you invoke
tools from the WorkFrame or from the tool's icon, the changes don't
affect you. If you prefer the command line, refer to the User's
Guide for the new invocation commands.
4. On OS/2 2.11 and OS/2 Warp for Windows, selecting "Search all libraries"
in the VisualAge C++ online information may give unexpected results
or cause a trap. This problem does not occur on OS/2 Warp FullPack.
5. If you want to maintain an earlier version of C Set ++ (not a beta)
on the same machine as VisualAge C++, the VisualAge C++ directories
MUST appear before the C Set ++ directories in the following
CONFIG.SYS statements:
PATH
DPATH
LIBPATH
LIB
INCLUDE
HELP
6. When you use C Set ++ on a machine where VisualAge C++ is installed:
1) You can use WorkFrame/2 V1.1 and V2.1 without restrictions. You
can also use executable files generated by C Set ++ V2.1 without
restrictions.
2) You can only use CPPFILT, DLLRNAME, and the compiler in a session
where you have put the C Set ++ compiler directories at the
beginning of the environment variables PATH, DPATH, LIB, INCLUDE,
and HELP. You can set the variables with the SET command from an
OS/2 window, or using WorkFrame/2 V2.1.
3) The C Set ++ debugger, EXTRA, and browser have DLL and help file name
conflicts with VisualAge C++ components. You cannot use DLLRNAME
to resolve these conflicts because the DLLs are loaded dynamically.
To resolve the conflicts, change the environment variables indicated
in point 2) above and use the Warp SET BeginLIBPATH command to put
the C Set ++ DLLs at the start of the LIBPATH. You cannot run the
VisualAge C++ Debugger, Performance Analyzer, or Browser at the
same time as the C Set ++ debugger, EXTRA, or browser.
7. You can use the VisualAge C++ Debugger and Performance Analyzer with
executable files generated by C Set ++ V2.1.
WorkFrame
=========
1. You cannot drag and drop objects from a project container to the
desktop or to another non-project folder or object. You can drag any
objects except folders and templates into a project container. The
User's Guide incorrectly states that any WPS object can be placed in
a project.
2. Double-byte character strings are not currently supported.
3. The MakeMake utility does not generate a complete set of dependencies
for building SOM objects directly using the SOM compiler. (The
Direct-to-SOM feature of the VisualAge compiler is supported.) To
ensure the Build utility correctly builds SOM objects:
1) Use MakeMake to generate a make file for the SOM Compile,
C++ Compile, and Linker actions.
2) Manually update the dependency information in the make file and
dependency file.
3) Set the build options to use the existing make file so that the
Build utility uses your customized make file instead of generating
a new one and overwriting your customized file.
4. The settings notebook for Actions, Types, and Variables, defined in
the Tool Setup window, do not behave like standard Workplace Shell
notebooks. If you make a change in any of the notebook pages, you
must use the OK button below the pages to save the changes. If
you close the notebook by double-clicking on the system menu (in the
top-left corner), your changes will NOT be saved. In a CSD, WorkFrame
will be corrected to issue a confirmation message if you try to close
the notebook with the system menu.
5. Some WorkFrame windows do not fit on VGA displays. Use ALT+F7 to
move the window so you can see the hidden areas.
6. Keyboard navigation on some windows does not work correctly;
Controls may be skipped or traversed in the wrong order.
7. Using F1 as a help key may give you general help instead of context
sensitive help, or may give you no help at all. Help for actions
that appear on the action menu is only available on project-scoped
actions, and only from the system menu of a project. It is not
available on pop-up menus, or on the Project or Selected menus.
8. The "Source directory" field in the Location page of the Project
Settings notebook is only validated if you select OK or change the
focus on that page to another field. If you close the notebook or
leave the page without pressing OK or moving to another control, the
field is not validated; if your specified source directories are
not valid, your project will appear to contain no files.
9. In the monitor window, clicking on an error that occurred in a file
belonging to a subproject causes the editor to load the wrong file.
10. In the Options menu, any action that is both file-scoped and
project-scoped always invokes the project-scoped options dialog.
11. It is possible to set up circular project inheritance chains using
WorkFrame, but doing so could cause system problems. Ensure your
inheritance chains are not circular.
12. In an inheritance hierarchy, when a parent project is deleted, its
child projects are notified and appropriate actions are taken (for
example, actions are updated). However, grandchildren and any
further descendant projects are not notified; if you try to execute
an action that was inherited from the deleted project, errors occur
because the action no longer exists.
13. Currently, the targets of any action (for example, .OBJ files from
a Compile action) are stored in the directory that contains the source
files that apply to the action (for example, the source files to be
compiled). The target objects should be stored in the Working
directory specified in the WorkFrame project.
14. By default, the Build action regenerates the make file each time you
invoke it. Because this takes time, you may not want to regenerate
the make file for projects where the source files, action options, and
dependencies are fairly constant. To prevent the Build utility from
generating a new make file each time, either:
o Use Build Smarts to specify not to generate the make file.
o Select Build from the Options menu, and then deselect the
"Generate a make file" option in the options dialog.
15. Project Access Methods (PAMs) written for WorkFrame Version 2.1 are
not supported for this version. There are no plans to publicize the
PAM interface for Version 3.0.
16. VisualAge C++ supports option DLLs written for WorkFrame Version 2.1,
but there is a problem in using them with respect to MakeMake and
Build.
17. Inheritance of options is not the same as inheritance of actions.
Options are inherited directly from the project that originally
defines the action that the options are associated with; they are not
inherited through the inheritance chain. To determine what project
defines the action, use the "Where defined" function for that action
in the Tools Setup view.
18. The monitor window can display approximately 620 lines of output.
When it passes that limit, it displays new messages by overwriting
the last line in the window.
19. When you delete parts (such as files) from a project, the project
refreshes any open views for that project. All of the parts disappear
from the view, and then the remaining ones reappear. Do not use the
parts until after the refresh has completed.
20. During builds, MakeMake sometimes fails with a return code of 65320
or 90290. Ignore the error and restart the build.
21. When you manipulate project views, a message box sometimes appears
referring to a GPIQueryBitmapParameters error. Dismiss the message
box and ignore the message.
22. Any projects created with the 1995 C Set ++ beta will not work with
this release of VisualAge C++. You must recreate the projects. If
you have projects from C Set ++ V2.1, you can migrate them with the
Migration utility.
23. Selecting "Create another" from the pop-up menu of an object in a
project container does nothing.
24. Double-clicking on an error generated by the IPF compiler in the
monitor window does not invoke the editor for the source file.
25. To delete projects, select Delete from the project pop-up menu.
Selecting projects and deleting them with the Delete key may hang your
system.
26. The font dialogs in the project settings notebooks are not saved.
When you set them, they remain active until the project is closed.
The next time you open the project, the defaults reappear.
Visual Builder
==============
1. If your workstation beeps while you are running Visual Builder, a C++
exception has probably been thrown. Check for the following
conditions:
- Missing resources (bitmaps or icons)
- Incorrect or incompatible part settings
2. If you have problems running your generated application, check first for
the following situations:
o Be sure to correctly destroy Object Factory instances:
- To delete a modal window, connect the Object Factory's newEvent
feature to the variable's deleteTarget action. This connection
must occur after the connection to the showModally action.
- To delete a modeless window, no connections are necessary. Open
the settings editor for the Object Factory and select the
autoDelete check box on the General page.
o If you mix static and dynamic linking, the resulting application
may behave unpredictably. We recommend you use DLLs and link
dynamically. Alternatively, compile and link one executable file
statically with no DLLs. Do not mix static and dynamic libraries.
o When you disable notification on collection parts, unpredictable
results occur. For example, if you use a sequence part to manage
objects in a container and then disable notification in the sequence,
the container is not notified of the change in the sequence and
is therefore not refreshed.
3. Avoid circular part relationships. They result in circular #include
directives, which cause problems with the resource compiler. For
example, suppose part A includes part B, which contains an Object
Factory part set to type A. Visual Builder generates the correct
#ifdef directives to conditionally include A, B, and A, but the
resource compiler stops at the second #include for type A.
4. Close all Visual Builder editor windows before unloading .VBB files.
In some cases, Visual Builder does not refresh the internal data model
to indicate that a .VBB file has been unloaded. After loading
additional .VBB files, close and reopen editor windows. Otherwise,
any ? icons that appear in the Composition Editor are not changed
to reflect the newly loaded .VBB data.
5. The default attribute type in the Part Interface Editor is int, not
IStandardNotifier as stated in the documentation.
6. Don't create attribute-to-attribute connections in which the source
attribute is not initialized before the ready event is signalled. You
may get a system error in the resulting application.
7. Don't make parameter-to-parameter connections. Visual Builder doesn't
prevent you from doing this, but errors occur at generation time.
8. If you retarget a connection to point to custom logic, Visual Builder
retains the original connection as well as drawing the new one. You
must manually delete the original connection.
9. If you import a nonvisual part and specify a user include file, don't
generate part source. If you do, Visual Builder overwrites your user
include file and code file with generated header and code files.
10. Resource file generation has been modified and is now different from
what is documented in the Visual Builder User's Guide:
o A .RC file is generated with the code for main().
o A .RCI file is generated with each part's source code.
11. The Settings editors for Visual Builder parts do not necessarily
reflect the current default values. To ensure that initial values
are set the way you expect, always explicitly set them. For example,
suppose the default value of a Boolean is TRUE and you want to set it
to FALSE. When you open the settings for the part, the check box for
the Boolean attribute is not selected. The deselected check box
indicates only that the value has never been set, not that the initial
value is false. To set it to FALSE, select and then deselect the
check box.
For some part instances, certain current settings appear on the Styles
page as NOT SET, even if you select a radio button to set the styles.
A NOT SET label indicates only that the style setting is not reflected
in the Composition Editor display; the correct setting appears in the
generated code for the part. If you don't set such styles explicitly,
default values appear in the generated code.
For settings in numeric entry fields, Visual Builder reflects only
those values entered in decimal notation. You can enter numbers with
bases other than 10 by using the # sign (for example, #0xBF), but the
expression is not evaluated until compile time.
12. If you select the Apply push button on any settings page, the
Help push button is disabled. To reenable help, switch to another
settings page and then switch back again, or close and reopen the
settings editor.
13. Although a Help push button appears on the Color page for the ITitle
part, no help information exists.
14. The following color settings exist for the IToolBarButton part but
don't appear in the documentation:
- Default transparent
- Transparent
15. When commandEvent is signalled in an IFrameWindow* client, duplicate
notifications can occur. For example, for a contextual pop-up menu
in a container that is the client of a frame window, selecting an
item from the pop-up menu signals a commandEvent notification in the
container. The frame window responds to the notification by
propagating the commandEvent (a duplicate) back to its client,
the container.
To block the duplicate commandEvent notification without otherwise
changing the behavior of the window at run time, add an IMultiCellCanvas*
part between the container and the window part. The IMultiCellCanvas*
part becomes the client of the window. In this situation, the second
notification is passed to the IMultiCellCanvas* part, not to the con-
tainer.
16. To use the ICircularSlider* part or the VBMM sample parts, you must
have MMPM/2 installed. (OS/2 Warp installs MMPM/2 by default.)
17. The VBSOM.VBE sample contains Direct-to-SOM parts from the SOMObjects
Toolkit that you can import into Visual Builder. The VBCC.VBE sample
contains collection class parts for you to use. You can find these
files in the IBMCPP\SAMPLES\VISBUILD\VBSAMPLE directory.
18. The OASearch sample application has changed since publication of the
Visual Builder User's Guide. For the latest updates, see the sample
files in the IBMCPP\SAMPLES\VISBUILD\OASEARCH directory.
19. If you use a menu bar, you must add extra space into your window to
hold the menu. Otherwise, the menu bar might overlay the control
closest to the top of the client area.
20. You cannot use fly-over text for the following controls:
- Group box
- Outline box
- Viewport
In addition, fly-over text is attached only to the "spinner" of
numeric and text spin buttons.
21. Bitmaps on palette buttons must be no larger than standard icons for
the display resolution being used. For VGA, the maximum size is 32x32.
For higher resolutions, the maximum size is 40x40.
22. If compiled application windows appear partially off the screen, be
aware that Visual Builder calculates window position differently
depending on how the windows are added to the free-form surface:
o If you construct the window directly on the free-form surface,
Visual Builder calculates a position offset from the upper left
corner of the scrollable free-form surface to the upper left
corner of the window. This doesn't usually present a problem
because most parts are built from the left top edge of the
free-form surface.
o If you add a previously constructed window to the free-form surface
as a subpart, Visual Builder calculates the offset from the lower
left corner of the scrollable free-form surface to the lower left
corner of the window.
If you have added enough other parts to increase the size of the
scrollable free-form surface, the offset might become large enough to
push the compiled window subpart off the upper or right edge of the
desktop display. To prevent this, drop the window subpart
immediately to the right of the primary window part. Drop variable
or nonvisual parts at the extreme right of the free-form surface.
23. In the Visual Builder User's Guide under "Creating the Help File",
the file name should be cppov33.ipf, not cppov33.ipf.ipf.
24. In the Visual Builder Parts Reference, the Building Guidelines -
IScrollBar topic is misleading. The list of things you can do should be
replaced with the following:
o Define a scroll bar for the client area of a frame window:
1) Select an IScrollBar part from the parts palette and drop it on
the free-form surface.
2) Assign the frame window as the owner of the scroll bar by
connecting the IFrameWindow this attribute to the IScrollBar
owner attribute.
3) Assign the frame window as the parent of the scroll bar by
connecting the IFrameWindow this attribute to the IScrollBar
parent attribute.
4) Connect the composite part ready event (from the free-form
surface) to the IFrameWindow addExtension action. Then connect
the IScrollBar this attribute to the newExtension parameter of
the ready-to-addExtension connection.
Indicate the location of the frame extension by opening settings
for the connection, pressing the Set Parameters push button, and
selecting a choice from the Location field. For a vertical
scroll bar located to the right of the client area, select the
RIGHTOFCLIENT choice.
5) Identify a handler for the scroll bar. You need to derive a
handler from the IScrollHandler class to provide meaningful
processing of the client area. To add the handler to your
scroll bar:
- Add the handler name in the Handler List field on the
IScrollBar Handlers settings page.
- Type the .HPP file name for the handler in the Class Editor
Required Include Files field.
o Define a scroll bar as a slider:
1) Select an IScrollBar part from the parts palette and drop it on a
canvas.
2) Change the scroll bar orientation to horizontal by setting the
Vertical field to ON and the Horizontal field to OFF
on the IScrollBar Styles settings page.
3) Identify a handler for the scroll bar. You need to derive a
handler from the IScrollHandler class to provide meaningful proc-
essing as a slider. To add the handler to your scroll bar part:
- Add the handler name in the Handler List field on the
IScrollBar Handlers settings page.
- Type the .hpp file name for the handler in the Class Editor
Required Include Files field.
25. In the Visual Builder Parts Reference:
o The anyEvent feature is missing for all visual and nonvisual
parts. The anyEvent feature is signalled whenever any event
within the part occurs.
o The following Handler page settings are incorrect for all parts:
HANDLER NAME
The name of the handler class being added to the handler list.
HANDLER LIST
Lists the handler classes already attached to the part.
MOVE
Reorders handler classes in the handler list.
REMOVE
Deletes handler classes from the handler list.
o The selected attributes of ICheckBox and IRadioButton are missing
the event indicator.
o The "General Settings" topics for IProgressIndicator and ISlider
should be updated as follows:
- Remove the Tick Spacing setting
- Remove the Primary Scale setting.
o The "Building Guidelines" topics for IProgressIndicator and
ISlider should read as follows:
To select the location of the scale of tick marks and text, use
custom logic. Click mouse button 2 on the free-form surface and
connect the composite part ready event to CUSTOM LOGIC for the
IProgressIndicator or ISlider part. Enter C++ code to select
the scale and number of ticks.
For example, if you want to show percentage of completion using a
progress indicator with a primary scale marked at ten-percent
intervals and a secondary scale marked at five-percent intervals,
you could enter the following code. In this example, the source
of the custom logic connection is the ready event of the
composite part, and the target is the progress indicator:
int i;
target->setPrimaryScale(IProgressIndicator::scale1);
target->setTicks(IProgressIndicator::scale1, 101);
for (i=0; i<101; i +=10) {
target->setTickLength(i, 10);
target->setTickText(i, IString(i));
}
target->setPrimaryScale(IProgressIndicator::scale2);
target->setTicks(IProgressIndicator::scale2, 101);
for (i=0; i<101; i +=5) {
target->setTickLength(i, 5);
target->setTickText(i, IString(i));
}
For a horizontal progress indicator or slider, scale1 places the
scale above the shaft; scale2 places the scale below the shaft.
For a vertical progress indicator or slider, scale1 places the
scale to the right of the shaft; scale2 places the scale to the
left of the shaft.
26. You must enter part names and other C++ keywords in single-byte mode.
If you enter them in double-byte mode, Visual Builder generates the
code without errors, but the code will not compile correctly.
27. Visual Builder does not evaluate settings that are entered as string
expressions. User interface controls whose size depends on the
length of the setting value (for example, a button or multicell canvas)
are not displayed as they would appear in the compiled application.
However, Visual Builder passes the expression correctly into the
generated code so it compiles successfully. For example, suppose you
enter #pbText as the text attribute of an IPushButton* part. Because
#pbText is not a literal value, the length of the label string is
unknown and the push button appears small in the Composition Editor.
Assuming you have defined the value of #pbText elsewhere, the push
button appears with the correct size and label in the compiled
application.
28. If you define menu accelerators in a nonprimary window subpart,
the window doesn't display at run time. This applies to windows
added as static subparts to a composite part, as well as to windows
that are instantiated dynamically using Object Factory parts.
29. If you use mixed-byte strings in file specifications, to add a new
part to a previously existing .VBB file, you MUST specify the
complete path with the file name, matching the case of each single-byte
character exactly. Otherwise, Visual Builder either:
- Overwrites previously existing data rather than appending it.
- Displays an erroneous message and cancels the request.
To review the complete file specification for your .VBB files, select
Options->Show full file names from the menu bar on the Visual Builder
window.
30. Before shutting down OS/2, make sure that Visual Builder is closed.
Otherwise, OS/2 does not shut down completely, requiring you to
turn the computer off.
Data Access Builder
===================
1. If your application uses the IDatastore class, you must bind the file
DAXSCL.BND to any databases accessed by your application. This file
allows IDatastore to connect, disconnect and complete transactions
against the database. To bind the file, enter the following command:
SQLBIND d:/ibmcpp/bnd/DAXSCL.BND database /G=PUBLIC
where database is the name of your database.
2. From the Class Settings page of the Data Access Builder you can now:
o Force a generated class to be read-only. The class will throw
an exception if the add(), del(), or update() methods are called.
o Generate a #pragma library("filename") directive in your header
file to point to Data Access generated classes in a library.
o Generate the SOM dllname instruction in your code with a filename
that you specify.
For more details about the changes to the Class Settings page, see
the online help.
3. When querying a catalog through DDCS or CAE, the Data Access Builder
cannot determine whether update is allowed for a view. The default
generation for remote views is set to read-only to prevent compilation
errors. If you know that your class can be updated, you can change
this default on the Class Settings page (see above).
4. You can link the Database Access class libraries to your application
statically or dynamically. In most cases, you don't need to specify
the library at link time; the required libraries are named in the .OBJ
files. The library names are:
CPPODS3I.LIB - import library for dynamic linking of C++ applications
CPPODS3.LIB - object library for static linking of C++ applications
CPPODI3I.LIB - import library for dynamic linking of SOM applications
CPPODI3.LIB - object library for static linking of SOM applications
5. If you statically link your application with the Data Access class
library, you also require UPM.LIB. Ensure that the directory where
UPM.LIB resides, usually MUGLIB on your root drive, is specified in
your LIB environment variable in CONFIG.SYS.
6. The sample stock applications for C++ and SOM indicate that a DLL is
generated when you build with WorkFrame. This is no longer true;
the generated classes are linked directly to the sample applications.
You do not need to modify your LIBPATH to run these applications.
7. In the Data Access documentation, the IBMCPP\INCLUDE directory is
occasionally referred to as IBMCPP\IBMCLASS.
8. The SOM Compiler action does not work in project builds that use
WorkFrame. You must run this action separately before starting a
build, and every time an IDL file is modified or regenerated. You can
set up the SOM Compiler action and start the compile from the
pop-up menu of each IDL in the project. The command is:
sc.exe -E SMEMIT=xc;xh;xih; %s
where %s is the source filename.
10. When you build generated SOM programs, you must explicitly specify
SOMTK.LIB in the link action.
11. Be cautious when reusing make files generated with the WorkFrame
Build or MakeMake actions that result in a precompile action (such as
the SQL Precompile action). Dependencies can't be generated correctly
for source files produced as a result of these actions because the
files do not exist or may be modified during the precompile step.
Because the make file won't contain dependencies for the missing or
modified files, these files may not be recompiled when the header
files that they depend upon are modified.
You can avoid this problem by always building your application using
an action that generates a new make file (Build or BuildAll), or
by reusing a make file that contains the correct dependencies for the
precompiled source (for example, run MakeMake after completing the
SQL Precompile step on the .SQC files).
12. The SOM Stock Sample uses a database called BrchTwo, not BrchOne as
indicated in the documentation. The file BrchTwo.DAX replaces
BrchOne.DAX in this sample. Before you build this sample, generate
C++ bindings for the Database Access class library. From the
IBMCPP\INCLUDE directory, enter: sc -xh *.idl
You must also run the BINDINGS.MAK file before you start the build.
13. The CSETPP stock sample is built statically. Make sure the directory
where the UPM.LIB library file resides is specified in your LIB
environment variable (see point 5 above).
14. You can specify nullable columns as the data identifier in mapped
classes. (A nullable column does not require data to be specified
in the relational table.) However, you cannot use the class member
functions to add, delete, update, or retrieve records with a NULL
value in the data identifier. You can use the select and refresh
member functions.
15. The Data Access Builder currently supports DB2/2 V1.2. After DB2/2
Version 2.1 becomes available, you can obtain a CSD to enable the Data
Access Builder to access DB2/2 V2.1 databases. For details on how to
obtain CSDs, please refer to the section on Service and Technical
Support in this file, or to the "Help! and how to get it" card in your
VisualAge C++ package.
16. The IDL generation portion of the Data Access Builder occasionally
inserts invalid data in the generated files, causing compiler errors
when you build the generated files. If this occurs, regenerate your
parts and rebuild the files.
17. The Data Access Builder currently does not support the DB2/2 DBCS
GRAPHIC types, and does not map columns of these types from the table
definition into the generated class. GRAPHIC columns are not
accessible from the generated class methods.
18. If you are using DB2/2 DBCS, your table or column names may contain
DBCS characters. The Data Access Builder generates code using these
names as the class name and member names. Because DBCS characters
are not allowed in C++ identifiers, you must rename the target class
and target attributes (members). Use the Data Access Builder class
notebook for the classes to change the names.
19. Some additional changes to the sample program instructions in
the class library user's guide:
- The samples are in "/ibmcpp/samples/database/...", not
"/ibmcpp/samples/dax/...".
- When you generate the parts for DAXSAMP using the Data Access
Builder started with the workframe project pulldown,
ensure that the C++ Target library name checkbox has been
checked, and the libary is "carv". You will find both fields
in the CAR settings notebook.
- When you generate the parts for the CSETPP sample using the
Data Access Builder started from the command line, ensure
ensure that the C++ Target library name checkbox has
not been checked. You will find this field in the CAR
settings notebook.
- The CARBRWS application is found in the "Data Access
CarBrws Sample" folder.
- The CAREDIT application is found in the "Data Access
CarEdit Sample" folder.
- The DAXSAMP DLL is found in the "DAXSAMP Database DLL"
folder.
IBM Open Class Library
======================
1. The following methods are missing from the Database Access class
information in the Open Class Library Reference:
IDatastore:
IDatastore& enableShareModeExclusive( Boolean enable );
Enables or disables the shared mode in a datastore connection.
Enabling the option selects exclusive access to the database;
no other process will be able to to connect with exclusive access
until the original connection is reset.
Boolean isShareModeExclusive();
Returns a value indicating whether the shared mode has been
enabled (TRUE) or disabled (FALSE) for this connection.
IString asString()
Returns a string representing the connection. The string
contains the name of the datastore set with the constructor
or with the setDatastoreName method.
Generated IPersistentObjects:
IString asString()
Returns a string representing the object. The string contains
the data identifiers (usually the keys) as concatenated IStrings.
IPersistentObject& initializePart()
Notifies observers that the part is ready for use. This method
is usually called in the constructor.
2. In the Open Class Library information, the declaration of the
IDatastore.setDatastoreName method is incorrectly documented. The
correct definition is:
IDatastore& setDatastoreName( const IString& aDatastoreName );
3. In the printed version of the Class Library User's Guide, two of the
library files identified in the section "Linking to the Collection
Classes" are incorrect. The correct names are:
CPP00C3.LIB - for static linking
CPPOOC3I.LIB - import library for dynamic linking
CPPOOB3.DLL - for dynamic linking
4. A new flat Collection function, position(), is available for ordered
collections to determine the position of an element in the collection.
This function is documented in the online Open Class Library Reference
but not in the hardcopy.
5. The following do not work correctly on the GA level of OS/2 Warp:
o Context sensitive help does not work in spin button or combination
box controls. APAR PJ17235 has been opened to address the problem.
The problem is scheduled to be resolved in Warp FixPak 8.
o Drag images may become corrupted while dragging a container object,
a tool bar button, or a menu item. APAR PJ17913 has been opened
to address the problem. The problem is scheduled to be resolved in
Warp FixPak 9.
o Notebook tab text is always aligned on the left of the tab. As a
result, the function INotebook::setTabTextAlignment and the styles
INotebook::tabTextRight and INotebook::tabTextCenter have no
effect. APAR PJ15921 has been opened to address the problem. The
problem is scheduled to be resolved in the next release of OS/2
Warp.
o The Tab key no longer moves the cursor between controls on a
notebook page if the page window is a canvas. APAR PJ17294 has
been opened to address the problem. Until a fix is available,
you can use the following workaround:
1) For each canvas page window, create an IMultiCellCanvas object.
The multi-cell canvas must be the parent and owner of the canvas,
and use the notebook as its parent and owner.
2) Add the canvas to cell 1,1 of the multi-cell canvas, for example:
multiCellCanvas.addToCell( &canvas, 1, 1 );
3) Make row 1 and column 1 of the multi-cell canvas expandable:
multiCellCanvas
.setRowHeight ( 1, 0, true )
.setColumnWidth( 1, 0, true );
4) Add the multi-cell canvas as the page window of the notebook, in
place of the canvas.
6. In the online Open Class Library Reference:
o For IProgressIndicator, the data member armChangeId is missing from
the Notification Members group, and the enableNotification member
function is missing from the Public Functions window. You can find
both members by expanding the IProgressIndicator class name from
the Contents window.
o For ISlider, the data member armTrackId is missing from the Public
Data window. You can find it by expanding the ISlider class name
from the Contents window.
o For ICircularSlider, the data member trackId is missing from the
Notification Members group. You can find it by expanding the
ICircularSlider class name from the Contents window.
6. In the printed documentation, the close member function is missing
from the IObjectWindow class. It should be described as follows:
Use this function to explicitly close an object window.
The User Interface Class Library considers an IObjectWindow object
to represent a primary window, unless you call IWindow::setParent.
The User Interface Class Library automatically ends the message
processing for a thread when all of the thread's primary windows
are closed.
7. The exception information for the resetColor function of IWindow
is documented incorrectly. It should read as follows:
IAccessError The windowing system is unable to reset the color.
Editor
======
1. If the Save key behavior choice (under the Key Behavior choice of
the Options menu) doesn't work correctly, ensure that PROFILE.LX
has been updated with the appropriate macro. You can check
PROFILE.LX from the Profiles -> User preferences choice of the
Options menu. After you save the key behavior, PROFILE.LX should
contain one of the following commands:
'MACRO LPEX' for LPEX behavior
'MACRO EPM' for EPM behavior
'MACRO SEU' for SEU behavior
'MACRO XEDIT' for XEDIT behavior
'MACRO ISPF' for ISPF behavior
'MACRO CUSTOM' for customized behavior
Compilers/Runtime Library
=========================
1. The following locales were added, but are not listed in the
documentation:
AR_AA.IBM-864 Arabic
AR_AA.IBM-1046 Arabic
CS_CZ.IBM-852 Czechoslovakian
HU_HU.IBM-852 Hungarian
KO_KR.IBM-949 Korean
PL_PL.IBM-852 Polish
PT_BR.IBM-850 Brazilian Portuguese
RU_RU.IBM-866 Russian
TH_TH.IBM-874 Thai
ZH_CN.IBM-1381 Simplified Chinese (China)
ZH_TW.IBM-950 Traditional Chinese (Taiwan)
2. The __unaligned type qualifier is not accepted by the C++ compiler,
contrary to the documentation.
3. If you use the /Gb+ compiler option or #pragma SOMNoDataDirect for a
class in Direct-to-SOM mode, the compiler does not generate a copy
constructor or assignment operator for the class unless you use
#pragma SOMAttribute to make all data members DSOM attributes. The
compiler does not generate the copy constructor because the object to
copied could be remote, and accessing its instance data directly
would not be safe. The lack of a copy constructor may also generate
error messages (such as EDC3325).
4. The C++ compiler now supports user-defined array new and delete
operators, as defined by ANSI. If you have existing code that uses
user-defined operator new with placement parameters, it may no longer
compile. For example, the following code now causes an error:
class A { };
void* operator new(size_t sz, int i);
void test() { A* ap = new(3) A[10]; }
To eliminate the errors, add the following definition to your headers:
inline void* operator new[](size_t sz, int i)
{ return ::operator new(sz, i); }
For details about array new and delete, see the Language Reference.
5. The CONST segment is now read-only.
6. You cannot use the debug memory management compiler option (/Tm)
with SOM objects. You can use it when you compile direct-to-SOM.
7. In some cases, using precompiled header files may cause the compiler
to abend. This will be corrected in the first CSD.
Linker
======
1. A new VisualAge linker with improved function and performance replaces
LINK386, which is no longer supported for use with VisualAge C++.
If you use build scripts or make files from previous releases, replace
"LINK386" with "ILINK /NOFREE". The new linker supports most LINK386
options. See the User's Guide for more information about the linker.
2. The ILIB library utility replaces the LIB utility included in previous
releases of C Set ++. If you use build scripts or make files from
previous releases, replace "LIB" with "ILIB".
Browser
=======
1. If you used the C Set ++ beta, delete any .PD* files you created with it.
2. If you browse a program that contains .OBJ files created from C source
files, the Browser Files Dialog appears and informs you that the .PDB
files for the C files could not be found. Ignore this message and
select the Load button.
3. On some systems, with certain video drivers and resolutions, very
large and complex graphs may be drawn outside of the Browser window
and over other windows. This does not affect the contents of the
other windows. To redraw the other windows, give them focus, and then
refresh or resize them. If you copy or print the windows, the
overdrawn lines do not appear.
4. If you choose to Generate Browser information, the compiler creates
a PDB file even if the compilation fails. The file may then contain
incorrect data. The browser cannot always detect this problem.
5. When you need to use the /Fb* option, the compiler generates a warning.
When you do specify it, the compiler may still generate this warning.
If this happens, you can ignore the warning.
6. When fully-qualified file names are listed, they show the names after
compilation, not necessarily the names on your system. For example,
if you List All Files in any of the VisualAge C++ libraries, they all
appear to be located in C:\IBMCPP. The browser searches in that
location first; if it cannot find the file there, it searches the
path defined in the Browser Settings notebook.
7. The browser loads all the information from a program (.EXE or DLL),
including information from any LIB files used. If the project that
builds the .EXE or DLL does not contain the project that builds the
LIB file, the Refresh function in the Browser cannot determine how to
refresh the information and the information is not displayed.
8. To start the Browser from the VisualAge Editor:
1. Select the Project menu in the Editor.
2. Select the Browse action.
This is described incorrectly in the VisualAge C++ User's Guide.
9. If you try to run the Browser on the executable files for the
VisualAge C++ sample projects, you may see the message "Will not
QuickBrowse the following files after analysis of the make file."
If you see this message, choose Cancel, exit the Browser, and then
do one of the following:
o Rebuild the project.
o Rename the target of the project.
o Delete the target of the project.
You can then browse the project.
10. If you load some browser information with QuickBrowse and some with
compiler-generated .PDB files, you may get the message "An error
occurred while loading the file filename.pdb". Either delete the
.PDB files and load only QuickBrowse information, or rebuild your
project to generate .PDB files for all of your source files. If the
problem persists, contact VisualAge C++ Service and Support.
11. If you try to open the Graph window while using XGA-2 adapters
running at 1280x1024x16 resolution, the browser traps. To avoid this
problem, change the resolution.
12. QuickBrowse does not correctly identify SOM classes.
Debugger
========
1. If MMPM/2 is installed, the Debugger may shut down when it tries to
make a beep sound. (The Warp operating system installs MMPM/2 by
default.) To avoid this problem, use DINSTSND.CMD to remove the sound
portion of MMPM/2, or run the Debugger in Synchronous PM Debugging mode.
2. Linking with /DBGPACK can speed up both linking and Debugger startup.
3. Debugging code generated with the /G5 compiler option is not supported.
However, the only problem that has been noted is that the Debugger
can't produce a disassembly or mixed view for some programs.
4. Expression evaluation and program execution control for Direct-To-SOM
objects behave the same way as they do for non-SOM C++ objects.
You can set function breakpoints on Direct-To-SOM methods from the
Breakpoint menu, but you must add the characters __DTS to the end of
the method name. For example, to set a breakpoint on the setFlag
method, you must specify setFlag__DTS as the method name in the
Function Breakpoint dialog.
5. To debug SOM objects built with the SOM compiler using the IDL
language, you must use the -sir option to tell the SOM compiler to
create an interface repository file. The Debugger can read and
process interface repository data. However, the interface repository
file name must be specified by the SOMIR environment variable,
for example:
SET SOMIR=D:\SOMTESTS\CPP\TYPES.IR
To avoid excessive search times, make sure SOMIR only specifies files
required for your application.
SOM objects built with the SOM compiler are instantiated into pointers.
Before their instantiation, these variables do not point to valid
SOM objects. As a result, once they are de-referenced in the variable
monitor window, only compiler-generated minimal debug information
is displayed. After instantiation, the Debugger dynamically alters
the contents of the variable display window based on the information
it derives from the interface repository file.
To ensure that packing information is consistently represented for
both the repository data generated by the SOM compiler and the debug
data generated by the C/C++ compiler, use the default packing schemes.
The Debugger cannot correct any mismatches between the packing
information, and could display incorrect data.
6. Debugging distributed SOM (DSOM) programs is currently not supported.
7. There are a number of restrictions on stepping:
o Do not use Step Debug (Ctrl-D) over a DosReleaseMutexSem or a
DosRequestMutexSem. Use Step Over(Ctrl-O).
o If you debug a program that uses floating-point instructions on a
machine without a math coprocessor, you cannot single-step consistently
across floating-point instructions.
o The accuracy of the call stack cannot be guaranteed if you step into
code that was not compiled with debug information (for example,
operating system code). As a result, Step Return may not return
to the expected location. The Call Stack corrects itself after you
step all the way through the prolog code in the function, at
which point Step Return will also function correctly.
8. The Monitor, Register, Call Stack, and Storage windows do not support
the pointer-to-member operator.
9. To typecast a pointer in a monitor window, you must define the type
using a typedef. You can cast a variable only to a type that has been
referenced in the object module.
10. Only the call stack associated with the current ring is shown in the
Call Stack window. For example, if the application is stopped in
ring 2, the call stack for ring 3 is not shown.
11. The context-sensitive editing support in the Debugger is currently
limited to opening the file. The cursor is not positioned to the
correct line number in the editor.
12. Certain combinations of display drivers and fonts can result in a
blank source window. If this occurs, change the font size.
13. When you debug a Presentation Manager application in synchronous
mode, other multithread PM applications running in the background
that send messages between threads may experience problems. Avoid
running programs like the Performance Analyzer while debugging.
14. If the Desktop Automatic Lockup feature is enabled and the Debugger
is active, the system permanently locks up when the timer expires.
Currently, the only solution is to reboot.
15. The Debugger requires fixed-pitch bitmap fonts, which are part of
the OS/2 installation.
16. If you have an active printer driver loaded under OS/2 and the
printer can print in graphics mode, you can print the Debugger
screen that has focus by pressing the Print Screen key.
17. The Debugger uses DosStartSession to start the program being debugged.
DosStartSession may give error messages that you don't see when you
run the program outside of the Debugger. Two common errors and their
causes are:
"PROGRAM NOT LOADED. DOSSTARTSESSION FAILED (RC=2)."
DosStartSession couldn't find one of the DLLs referenced in your
program.
"PROGRAM NOT LOADED. DOSSTARTSESSION FAILED (RC=127)."
DosStartSession found the DLL but couldn't find one of the exported
entry points. It may be that the LIB doesn't match the DLL, or
that /IGNORECASE was used incorrectly (because the loader is case-
sensitive, it may not find entries if you link as case-insensitive).
Performance Analyzer
====================
1. If you have written customized setjmp or longjmp functions, the
Performance Analyzer will not function correctly.
2. The Performance Analyzer's timing counter wraps after approximately
one hour. If events are collected for more than one hour, the time
stamps will not be accurate.
3. The Performance Analyzer cannot determine exactly when thread
switches occur. In the Execution Density and Time Line diagrams, the
elapsed time between the thread switch and the next function call on
the new thread is associated with the function on the top of the call
stack in the switched-out thread. If there are no functions on the
call stack in the switched-out thread, the time is not associated
with any function. This causes gaps to appear in the diagrams.
4. Calls to functions that perform file accesses can only be traced
while the target application is running. I/O flush operations that
occur after the target application has terminated are not traced.
5. The Performance Analyzer does not function properly when a program
that uses WinLockInput is also running under OS/2. WinLockInput
doesn't allow messages to be sent between threads.
6. Tracing an application while you are either debugging the application
with the VisualAge Debugger or tracing the application in another OS/2
session can cause unpredictable results.
7. The Performance Analyzer cannot generate trace data for child
processes in a multiprocess application.
8. The Performance Analyzer cannot dynamically calculate operating
system overhead. So, if you run other applications at the same time
you are generating trace data using the Performance Analyzer, the
trace information will be unreliable.
9. C++ applications often contain functions consisting of a small number
of instructions. On fast machines, the execution time for these
functions is small compared to the system clock resolution of 838
nanoseconds. As a result, reported cumulative execution times may be
imprecise, especially when these small functions are called thousands
of times.
10. After you specify an executable to be traced, the Performance
Analyzer displays the Trace Generation window. However, if the
executable to be traced is quite large, the Trace Generation window
may not appear immediately.
11. The Save settings choice from the Options menu saves the status area
fonts and colors, the window size and position, and the window fonts.
Settings that are trace file specific are not saved.
12. If you have trouble printing to a network printer configured as an
OS/2 network printer, try setting up the printer as a local printer
and attaching to the network printer by issuing a requester command.
For example, to attach to the network printer using LAN Requester
you could issue a command similar to the following:
NET USE LPT1: mylanprt
13. If you view a large trace file using either the Call Nesting or
Time Line diagrams, scrolling and searching will be slow.
14. The Find command searches from the highlighted area to the end of
the diagram; it does not wrap around. To ensure that you find all
occurrences of the item for which you are searching, place the
highlight at the top of the diagram before issuing the Find command.
18. The Performance Analyzer uses DosStartSession to start the program
being traced. DosStartSession may give error messages that you don't
see when you run the program outside of the Performance Analyzer.
Two common errors and their causes are:
"PROGRAM NOT LOADED. DOSSTARTSESSION FAILED (RC=2)."
DosStartSession couldn't find one of the DLLs referenced in your
program.
"PROGRAM NOT LOADED. DOSSTARTSESSION FAILED (RC=127)."
DosStartSession found the DLL but couldn't find one of the exported
entry points. It may be that the LIB doesn't match the DLL, or
that /IGNORECASE was used incorrectly (because the loader is case-
sensitive, it may not find entries if you link as case-insensitive).
Toolkit
=======
1. The Warp Toolkit components of VisualAge C++ are at the DevCon 7
level, with some changes. Do not replace any components with DevCon 7
components; use DevCon 8 or higher.
2. In some cases, KwikINF may not be able to initialize. Try removing
some NDX files from the HELPNDX environment variable.
Trademarks
----------
The following terms are trademarks of the International Business Machines
Corporation in the United States or other countries or both:
BookManager
C Set ++
DB2/2
IBM
IBMLink
Open Class
OS/2
Presentation Manager
QuickBrowse
VisualAge
WorkFrame
Workplace Shell
XGA
Other terms used in this readme, which may be denoted by a double asterisk (**),
may be trademarks or service marks of other corporations.
Your Satisfaction
-----------------
Your satisfaction with IBM is important to us. If you are not totally
satisfied with this product, please contact us at VisualAge C++ Support.
Tell us what is not meeting your expectations and why you are
dissatisfied. Provide your name, your organization's name, and
your telephone number so that we can contact you. We will work with
you to resolve your concerns.
To contact us, use any of these:
o Internet: va_cpp@vnet.ibm.com
o Fax : 416-448-4414
o Mail : IBM Lab
3G/812/1150/TOR
C Set/VisualAge C++ Service and Support Team
1150 Eglinton Ave. E.
North York, Ontario
CANADA M3C 1H7