* COMPONENT_NAME: IBM C and C++ Compilers, Version 3.6.5, Fixpak 2 * * FUNCTIONS: README for Windows NT * * (C) COPYRIGHT International Business Machines Corp. 1994,1998,2000 * * All Rights Reserved. * Licensed Materials - Property of IBM * * US Government Users Restricted Rights - Use, duplication or * disclosure restricted by GSA ADP Schedule Contract with IBM Corp. ********************************************************************** Installation ------------- To install this Fixpak perform the following steps : (1) Reboot your machine. (2) Unzip the Fixpak into a temporary directory. The unzipped Fixpak occupies about 78M bytes. (3) Make sure you are currently in the directory into which the fixpak was unzipped. (4) Issue the following command : SETUP (5) Follow the instructions carefully. This Fixpak uninstalls the old product before installing itself. (6) Reboot the machine. IMPORTANT INFORMATION --------------------- This file contains important information about the IBM C and C++ Compilers product. You should read the following notes before you install and use this product. The second part of this file contains additional configuration for the html help system and search facility. 1. Debugger ----------- o The Debugger that is shipped in the product is not supported on Windows 2000. Use IBM Distributed Debugger V8.5 instead. o Closing the process list dialog with Alt-F4 will cause the debugger to crash. The process list dialog must be closed by clicking the Cancel button. Installing the Remote Debugger (Windows 95, Windows 98) ------------------------------------------------------- Only remote debugging is supported for Windows 95 and Windows 98. You cannot debug programs running on Windows 95 or Windows 98 locally. In order to debug a program on a remote Windows 95 or a remote Windows 98 machine, you must install the remote debugger manually by copying files onto the remote machine. You can only copy files from a Windows NT installation of the IBM C and C++ Compilers. To install the remote debugger on your Windows 95 or Windows 98 machine: 1. Choose a directory in your PATH environment variable to install the remote debugger files into. You can create a new directory (for example, C:\remdbg) and add the directory to your PATH environment variable. 2. Create an "msg" directory in your remote debugger directory (for example, C:\remdbg\msg). 3. Copy the following files from your IBM C and C++ Compilers "bin" directory (for example, C:\ibmcxxw\bin) to your remote debugger directory: CPPYB35I.DLL CPPYM35I.DLL CPPYU35I.DLL CPPDUNF1.DLL CPPDDLE1.DLL CPPDXCX1.DLL CPPDTCP1.DLL DEMANGLI.DLL CPPDFSRV.EXE IRMTDBG.EXE 4. Copy ONE of the following language specific files from your IBM C and C++ compilers "bin" directory to your remote debugger directory: +-------------------------------------+ | Language | File Name | +----------------------+--------------+ | Simplified Chinese | CPPDMGC1.DLL | | Japanese | CPPDMGJ1.DLL | | All other languages | CPPDMG1.DLL | +----------------------+--------------+ 5. Copy the CPPDCC1.CAT file from your IBM C and C++ Compilers "msg" directory (for example, C:\ibmcxxw\msg) to your remote debugger "msg" directory. 6. Set the NLSPATH environment variable on your remote machine with the following command: set NLSPATH=full_path_of_debugger_directory\cat_file_directory\%N For example, if your remote debugger directory is C:\remdbg, and your message catalogue file (.cat) is in \msg, enter the following command: set NLSPATH=C:\remdbg\msg\%N You can now start to debug the program on the remote Windows 95 or remote Windows 98 machine by following the instructions on the "Start the Debugger and the Remote Program" page of the online help. 2. Compiler ----------- a) The default setting for the /qarch option, which specifies the architecture on which the executable program will be run, has been changed from /qarch=x86 (any 32-bit x86 architecture) to /qarch=486 (any architecture supporting the 486 instruction set). b) The default setting for the /Gi option (generate fast integer code) has been changed from /Gi- to /Gi+. c) If the /Op- option (disable stack pointer optimizations) was being used to force the stack to be chained, note that a new option (/Oq) has been added that specifically controls stack chaining. Using /Op+ /Oq+ when the stack must be chained will produce better code than using /Op-. 3. Linker/Librarian ------------------- a) IBM VisualAge C++ Professional, v4.0 allows function and symbol names of up to 64000 characters long. The ILink and ILIB utilities have been enhanced in IBM C and C++ Compilers V3.6.4 to handle objects and libraries with these long names. b) The linker will only handle one resource file (.res) at a time. An error message will be issued if a user tries to link two or more resource files for an application. c) Due to system limitation, Windows 95 users cannot specify a base address of lower than 0x400000 when they generate an executable. If /base:0xADDRESS option is used (where ADDRESS < 0x400000), the linker option /NOFIXed should also be used. It will allow the system to relocate the application as the specified base address is not available. d) When linking a dll created by this product with a dll created by another compiler and using a single icc command, such as the example below where "ibm.obj" is the source object of "ibm.dll" and "microsoft.lib" is the import library of the "microsoft.dll". icc /ge- ibm.obj microsoft.lib The following error message may be returned: "Fatal error : invalid object 'microsoft.dll' at offset xxxx xxxx" The following workarounds may be used to avoid the problem: i. Add the linker flag of "/B" in front of any Microsoft import library. Thus icc will only pass those libraries to ilink, ii. Provide an export object file for linking a dll. In this case, icc will not call ilib for generating xxx.exp file, iii. Use ilink to link the xxx.dll instead of icc. e) When linking a dll, we recommend the users to use the linker option /base:0x1000000. Without using this option to specify an address above the default value of 0x400000, in some situation, Windows 98 may have problem reloading the dll to some other address. Using different base addresses for different dlls may also reduce overhead of loader execution time. f) If an import library, generated by Microsoft Visual C++ V6.0 or later, is provided as part of an icc command to generate a dll, an a.exp file must be supplied. For example: icc /ge- a.c ADVAPI32.lib where ADVAPI32.lib is generated by Microsoft Visual C++ V6.0. The following error message may be returned: fatal error : Invalid object "ADVAPI32.dll" at offset 69237 Since icc is needed to call ilib to generate an a.exp file for the linker. There are two ways to workaround the problem: 1) Append a "/B" in front of the library name, to instruct icc to pass the library to the linker (ilink.exe) only. i.e. icc /ge- a.c /B"ADVAPI32.lib" 2) Provide icc with an ilib.exe generated a.exp file. i.e. icc /ge- a.c a.exp ADVAPI32.lib 4. C++ Run-time Libraries ------------------------- a) The iostream library that was part of IBM C and C++ Compilers 3.6.0 was not compatible with earlier products such as VisualAge for C++ 3.5. This has now been fixed. 5. IBM Open Class Libraries --------------------------- a) Motif: This release of the Open Class Library now contains Motif support for IToolBar, IToolBarButton, ICustomButton, and the other related toolbar and custom button classes. b) Source Files: Please note that the Open Class source files are provided for reference and debugging use only. It is not currently possible to regenerate the Open Class libraries from these sources and the compiler provided with this release. c) DLLs You can improve first-time application start-up time by preloading the Open Class DLLs as follows: i) Create a program object for the Hello1 IOC sample (...\samples\iclui\hello1\hello1.exe) ii) Put the program object into the system's startup folder If the program object is configured to "start minimized", the sample window will not display when the system is started. d) Notification IDs in ilistcvw.hpp and icombovw.hpp moved: The following notification ids have been moved: - From ilistcvw.hpp to ilistbas.hpp: ICollectionViewListBox itemChangedId, itemsId, extendedSelectChangedId; to IBaseListBox - From icombovw.hpp to icombobs.hpp: ICollectionViewComboBox itemChangedId itemsId to IBaseComboBox They have been moved because there are problems with notification ids residing within template classes (static data members have problems with templates because with templates there could be multiple instances of the data member throughout the application). They have been moved to the base classes so that there will only be one instance of the notification ids in the application. However these notifications are not sent by the base class, only by the collection listbox and combobox classes. Do not use these notifications except when using the collection listbox or combobox. e) Bidirectional Support with IBM Open Class Libraries Conflicts in the bidirectional support provided by Open Class and the operating system result in the following limitations: o Controls created with the pmCompatible style of the IContainerControl, INotebook, IProgressIndicator, and IBaseSpinButton classes are not bidi-enabled. o Other IContainerControl windows show limited right-to-left behavior. For example, columns in details view will not appear right-to-left and icons will not be grouped from right to left. o Other INotebook windows show limited right-to-left behavior. For example, tabs will not appear from right to left. o Help windows displayed by IHelpWindow objects created with the IHelpWindow::ipfCompatible style are not bidi-enabled. o Other help windows show limited right-to-left behavior. o ICircularSlider is not bidi enabled. Additional information regarding support of bidirectional languages in the IBM Open Class Library can be found on the support page of the VisualAge C++ web site. f) To optimize the IString+= operation, the IBuffer/IDBCSBuffer class now allocates memory in 32 bytes chunk(s). To turn this optimization off, you can set the static boolean IBuffer::is32BytesAligned to false. By default, if IBuffer::setDefaultBuffer()is called, the boolean is set to false unconditionally. g) Changes/Clarifications for Windows 2000 IFileDialog The file dialog has a different appearance under Windows 2000, displaying a tool bar on the left edge of the window. Users can use this tool bar to quickly select common save areas as presented by the operating system. For Windows 2000, the default work directory for the open/save dialog is specified by the CSIDL_PERSONAL folder path as returned by the SHGetFolderPath API. The CSIDL_PERSONAL folder path translates to the file system directory that serves as a common repository for documents for the current user. Thus, if you do not specify an initial path to IFileDialog, the default directory used by the dialog is the CSIDL_PERSONAL folder path. Applications that need access to other Windows folders should query the operating system for the correct path and pass it to IFileDialog::Settings::setInitialDrive. IFileDialog::Settings::setInitialDrive If you do not call this function and you are running on Windows 2000, IFileDialog uses the CSIDL_PERSONAL folder path as the initial drive. The CSIDL_PERSONAL folder path translates to the file system directory that serves as a common repository for documents for the current user. IProfile changes The following constructor has been added to this class: public: IProfile( const char* profileName, EType type, EAccess access ) This is supported on Windows only. Constructs an IProfile object that creates or opens a system or user profile with read-only or read/write permission, depending on the value of the EType and EAccess values passed to the constructor. This constructor is useful for opening or creating a user profile. On Windows, the constructor that takes only a profile name will open a system profile with read/write access. Note that on the Windows 2000, only an administrator can open system profiles with read/write permission. profileName Name of the profile to open or create. type Specifies whether the profile is a user or system profile. access Specifies whether the profile should be opened with read-only access or created/opened with read/write access. Exceptions IInvalidParameter The IProfile object was not constructed. The profile name is missing. IAccessError The IProfile object was not constructed. The profile name may be invalid or the user is not authorized to create or open the specified type of profile. The following enumerations have been added: EAccess enum EAccess { kReadOnly, kReadWrite } This is supported on Windows only. Use this enumeration to specify the access mode for a profile. kReadOnly Open the profile with read only permission if it exists. kReadWrite Create or open the profile with read and write permission. EType enum EType { kSystem, kUser } This is supported on Windows only. Use this enumeration to specify the profile type. kSystem Create or open the profile under HKEY_LOCAL_MACHINE\Software in the Windows registry. Note that on Windows 2000, only a user with administrator permissions can do this. kUser Create or open the profile under HKEY_CURRENT_USER\Software in the Windows registry. IWindow::setFocus This function does not change the foreground window on Windows 2000 if another application is in the foreground. In this case, the other application will continue to receive keyboard input. System Objects Windows Terminal Server programs have two name spaces available for system objects: the session name space and the global name space. The IOC classes ISharedResource and ISharedCondition both create system objects. You can explicitly specify whether these classes should create their system objects in the global or session name space through the names you pass to their constructors. To specify a name space, add a "Global\" or "Local\" prefix to the name you pass when constructing an ISharedResource or ISharedCondition object. A prefix of "Global\" causes the system object to be created in the global name space. A prefix of "Local\" cause the object to be created in the session name space. On Windows 2000 systems without Terminal Services running, the "Global\" and "Local\" prefixes are ignored. For example: ISharedCondition("Global\\keyName") will create the name in global name space. ISharedCondition("Local\\keyName") will create the name in session name space. ISharedCondition("keyName") will create the name in session which is the default. h) Changes/Clarifications Regarding the Windows SDK Changes to support compiling with STRICT The Windows SDK supports stronger type checking for its handle types, such as HWND, HICON, and HDC, so that the compiler will not treat them as interchangable equivalents to void*. The SDK provides this stronger type checking when the STRICT macro is defined at compile time. Without the stronger type checking, you can pass an HWND value to an API that requires an HICON. In the previous version of the SDK, NO_STRICT was defined by default. IBM Open Class Library did not support compiling with STRICT defined with the previous SDK. In the updated SDK, STRICT is now the default. Simply by recompiling, you will get stronger type checking on code that uses the SDK handle types directly, such as application code that calls Windows APIs that take or return SDK handle types. The stronger type checking in the SDK handle types could identify errors in code that used to compile cleanly. If you encounter new handle-related compiler errors, you should either correct the code causing the errors, or change your builds to define the NO_STRICT macro at compile time. The handle classes in IBM Open Class Library have been enhanced to support compiling applications with either STRICT or NO_STRICT defined, through the addition of new Windows-only constructors and operators. In order to avoid introducing excessive compiler errors to existing code, however, the IOC handle class do not enforce stronger type checking when STRICT is defined. If you want stronger type checking in the IOC handle classes, similar to the stronger type checking you can get in the SDK handle types, you should ompile your application code with IC_WIN_STRICT_HANDLES defined and without NO_STRICT defined. This stronger type checking allows you to construct an IWindowHandle object only from an HWND value, and not an HDC or even a void* value. IFont The COM IFont class in the SDK file ocidl.h can conflict with the IFont class provided by IBM Open Class Library in ifont.hpp. This conflict existed in the previous SDK, but is more likely with the updated SDK because many more SDK header files now include ocidl.h. To avoid a conflict, IBM has redefined the COM IFont class to __IWinFont. If you have code that uses the COM IFont class, you must do one of the following to refer to that version of the IFont class instead of the version in IBM Open Class Library: - Define the macro __WIN_IFONT__ at compile time, or - Replace all occurences of IFont in your code (references to the COM version of IFont) with __IWinFont Note that you can use the COM IFont and IOC IFont classes in the same compilation unit only by using __IWinFont to reference the COM class. i) Other Changes or Clarifications IGImage file support The tasks and concepts section of the online reference incorrectly states that the IGImage class supports PCX and TIFF files. Deletion of IThreadFn objects IBM Open Class now deletes IThreadFn objects when the threads running those function objects complete, to match behavior in previous versions of IOC. Before this fix, IOC was incorrectly leaking IThreadFn objects. Note that with this fix, incorrectly coded applications may fail in the following cases: - The application deletes an IThreadFn object that IOC has already deleted or will delete. - The application creates IThreadFn objects on the stack instead of via operator new. - The application starts another thread using an IThreadFn object that IOC has already deleted. Deletion of IWindow attributes The pointer returned by IWindow::addOrReplaceAttribute is no longer valid after the IWindow object is deleted, or after the attribute is replaced by another call to IWindow::addOrReplaceAttribute. 6. Installing Additional Components ----------------------------------- To install additional components follow these steps: 1. Insert the IBM C and C++ Compilers, Version 3.6 CD-ROM into the CD-ROM drive. 2. If Autoplay is not enabled, open the CD-ROM and invoke setup.exe 3. Choose IBM C and C++ Compilers, Version 3.6 and proceed to the feature selection panel. 4. Select the new features you wish to add to your original. The Windows installation program does remember which features have originally been installed. 5. Ensure that you select the same target drives and directories as you did in the original installation. 6. Follow the remaining instructions to complete the installation. DBCS (Double Byte Character String) NOTES ----------------------------------------- o When using the English version of VisualAge C++ on a DBCS language environment, you need to change the LANG environment variable in SETENV.CMD manually. (If you don't make this change, you may not build DBCS application correctly, because the compiler assumes an English environment.) o To access Graphic Data type via UDB ODBC driver, we need to set PATCH1 and PATCH2 in db2cli.ini. See the detailed information at: http://www.software.ibm.com/data/db2/java/dbcsjava.html ====================================================================== Part 2. Help System Search Server ====================================================================== 1.0 Searching HTML Help ----------------------- The search system consists of a search engine and a search server. The search system is stored in its own directory because it may be used by other products. 2.0 Using the HTML Search System -------------------------------- 2.1 Browser requirements IBM HTML help requires a frames-supporting browser such as Netscape version 3.01 or Internet Explorer version 3.02. The browser that you use must not have proxy handling for the localhost port. Ensure you turn off proxy handling for localhost in the browser you use. 2.2 Starting and Stopping the Server If the search server has stopped (or you have stopped it with Task Manager), you can restart it by double clicking the "Help Home Page" icon in the Start menu...product folder. 2.3 Searching with Proxies enabled in Netscape or Internet Explorer If you use Netscape or Internet Explorer with proxies enabled manually, you can speed up search significantly by modifying your proxy information. In Netscape 3: ---------------- a) Select Options... Network Preferences... b) Click the Proxies tab c) Click View at the Manual Proxy Configuration selection d) Type: localhost:49213 in the "No proxies for" box. If you have other entries here, separate the new entry with a comma. e) Click OK, then click OK to exit the Proxies tab. In Netscape 4 (Communicator) ---------------------------- a) Select Edit... Preferences.. b) Double-click Advanced in the Category tree c) Click Proxies in the Advanced subtree d) Click View at the Manual Proxy Configuration selection e) Type: localhost:49213 in the "Exceptions... Do not use proxy servers for domains beginning with" box. If you have other entries here, separate the new entry with a comma. f) Click OK, then click OK to exit the Preferences Window. In Internet Explorer 3 and 4 ---------------------------- a) Select View... Options b) Select Connection c) Type: localhost:49213 in the "Exceptions... Do not use proxy servers for addresses beginning with" box. If you have other entries here, separate the new entry with a comma. d) Select the "Do not use proxy server for local (intranet) addresses" box e) Click OK Internet Explorer 4.0 HTTP 1.1 settings ------------------------------------------- Currently the default settings on Internet Explorer cause a conflict with the search server. As a workaround, disable the HTTP 1.1 settings checkbox from Internet Explorer's advanced options. Reboot of your system enable the new setting. Socks servers and proxies: -------------------------- If you are using Netscape 3, and you dial-in to a secure site to access the internet with a proxy or socks server, you will need to delete these settings in Netscape before you can search. This is a bug with Netscape 3. Netscape Communicator simply needs to uncheck the setting to work properly. 3.0 If the Search System is not Uninstalled on Windows ------------------------------------------------------ If the search system does not get uninstalled on Windows NT, the cause may be: a) Another product is using the search system runtime, so it cannot be removed b) The search system uninstall did not perform as expected To check whether the search system is used by other products, run the following command: nqcounti . To find out where the search system is installed, echo the environment variable IMNINSTSRV. For example, if the search system is installed on D:\IMNNQ_NT under Windows NT, then invoke: nqcounti D:\IMNNQ_NT. The command will return the number of indices (ie. products) that are still registered with the search engine runtime. If the returns says 1 or more indices are still active, then search system cannot be removed as other products are still registered. If the search system returns '0 indices active', then the uninstall failed. 3.1 Rebooting After Uninstalling the Product After an IBM for C and C++ uninstall, it is very important to reboot before doing another install. The reason is that some search system runtime DLLs can be held by the operating system and so would not be removed until the next reboot. If a search system runtime install happens before the reboot, the newly installed search system runtime DLLs will be deleted on the next reboot rendering the search system runtime unuseable. 3.2 On Windows 2000, using Netscape to do a Help Search is very slow. 4.0 Other Changes ----------------- This version uses a new version of the Microsoft SDK. Consequently the tools supported are different. Win32 SDK Online Help: Please see "Platform SDK Documentation" of "Microsoft Platform SDK" for online help.