### Approach to Migration

Usually, the best approach to migration is to begin with the main executable files, then, one at a time, migrate each application DLL.

You can test the full function of the project after each migrated piece. You cannot use this method for projects that use IBM Open Class Libraries (IOC) across DLL boundaries.

1. If your application uses more than a single run time, convert your application to use a single, shared run time.
2. If your application depends on the old behavior of atexit(), convert your application to use the C/C++ run time migration DLLs. Otherwise, use the DLLRNAME utility to convert your application's executables to use the IBM C and C++ Compilers run time DLLs.
3. Focus first on the application’s executable file. Build it with IBM C and C++ Compilers, but call the unmigrated application DLLs. Then, migrate each DLL in turn, starting with non-IOC DLLs.
4. When migrating Windows code, if you get syntax errors in your Resource Compiler files in pop-up or extended menu statements, use EXCMV to migrate resource files.
5. Convert your application to remove any dependencies on the old atexit() behavior.

If you have projects that use IOC libraries across DLL boundaries, you must convert and test each application DLL separately.

C/C++ Run Time Migration DLLs

If you built your application with VisualAge C++ for OS/2 Version 3.0 or VisualAge for C++ for Windows Version 3.5, you must convert your EXEs and DLLs to use the new C/C++ run time. There is static data stored in the run times, such as environment data, and exception and new handlers that are used by the code in the DLL. You do not have to rebuild these DLLs (you may not have the source).

We have provided a set of C/C++ run time migration DLLs. They provide all the entry points that were present in VisualAge C++ for OS/2 Version 3.0, VisualAge for C++ for Windows Version 3.5, they maintain the pre-ANSI atexit() processing behaviour.

To convert a DLL (appl.dll, for example) to the C/C++ migration DLLs, the following commands are required:

- `dllrname``` `dllorexe``` `cppos30=cppxs36 cppom30=cppxm36`
  Where dllorexe is the name of the DLL or EXE that you are converting.

- `dllrname` `dllorexe` `cppws35i=cppysi36 cppwm35i=cppymi36 demangli=cpprdi36`
  Where dllorexe is the name of the DLL or EXE that you are converting.