# How to use YACL with Microsoft Visual C++

Last update: June 29, 1997

This file provides directions on how to build YACL and its demo programs using Microsoft Visual C++.

Caveat: YACL cannot be built with the Win16 versions (1.52 and earlier) of Visual C++, because those versions do not have adequate support for templates. I have tested YACL with VC++ version 2.1 under Windows NT version 3.51.

## Building YACL

Here are the steps:

0. Create and change into the directory you want to install YACL in. For example, in an NT command window:

`md c:\yacl`

`c:`

`cd \yacl`

1. Unzip the file YACL0160.ZIP, preserving directories. For example:

`unzip yacl0160.zip`

or, if you use pkunzip under DOS:

`pkunzip -d yacl0160.zip`

2. Set the environment variable YACLPATH to point to the directory in which yacl was unzipped, e.g.,

`set YACLPATH=c:\yacl`

3. Modify the control file. Edit the file control/msvcpp.ctl. In that file, set the variable MSVCPATH to point to the bin directory of the compiler. Its default setting in that file is f:\msvc20.

4. Make sure that the directory containing nmake is in your PATH. For example, if you have installed VC++ in `e:\msvc20`, then make sure that `e:\msvc20\bin` is in your PATH.

5. Build the libraries. CD into the directory you chose in step 0 and issue the make command in an NT command window, type

`nmake -f msvcpp.mak`

6. Poke around in the directory structure under basedemo and uidemo; build and try out the programs there using the make files provided. Each directory in uidemo and almost every directory in basedemo contains a VC++-specific makefile named msvcpp.mak which can be used for building the demo. I have provided makefiles for most of the base demos but not all because most, if not all, the base classes are heavily used in the UI classes.

You can also build a debug version of the library via the command

`nmake -f msvcpp.mak "DEBUG=-DDEBUG"`

## Known problems

Under VC++ 2.1, the iostream classes seem to allocate memory dynamically and release it when the program terminates. The result is that the allocated memory shows up as a leak in the memory leak checker's output, although very likely it isn't a leak.

VC++ seems to generate improper code for default arguments to functions in some circumstances. I had to put in a workaround for this; look in the file basedemo/format1.cxx for an example. Look also in apps/dlged/dlgedit.cxx.

The GUI demos have a peculiar problem: some SimpleVObjects (e.g., the Label, ToggleButton and ExOrToggleButton), when created as children of a CompositeVObject, show a grey background instead of a white one. This should be the default behavior if the object is a child of a Dialog, not a CompositeVObject. This phenomenon does not occur under the other compilers (Borland and Watcom), so it must be something specific to the VC++ runtime system.

VC++ does not include POSIX routines for directory handling. Consequently the Directory class is not supported under that compiler.