Knowledge Base |

# ControlWizard Generates Both 16-bit and 32-bit Projects

Article ID: 125242

Article Last Modified on 8/16/2005

APPLIES TO

- Microsoft OLE Control Developer's Kit (CDK)

This article was previously published under Q125242

## SUMMARY

The ControlWizard included with the Microsoft OLE Control Development Kit (CDK) generates both 16-bit and 32-bit projects. In most cases, you can develop your control on either a 16-bit or 32-bit platform, and then rebuild the control on the other platform.

## MORE INFORMATION

When ControlWizard is used to create an OLE control, two projects are generated. The full project name you specify is used as the base name for the 16-bit MAK file and other files used by the 16-bit IDE. The first six letters of the project name followed by "32" are used to create a base name for the 32-bit MAK and DEF files and other files used by the 32-bit IDE.
For example, if the full project name is TESTCTRL, these two MAK files are generated:

TESTCTRL.MAK -- 16-bit Project File
TESTCT32.MAK -- 32-bit Project File

ControlWizard also generates a 'makefile' file that NMAKE can use to generate either a 16- or 32-bit project by specifying the WIN32 flag on the command line. For example:

    nmake WIN32=1       // 32 bit version
    nmake WIN32=0       // 16 bit version

Within the generated source files, place platform-dependent code in conditional compilation blocks, as shown in this example:

       LRESULT CTestCtrl::OnOcmCommand(WPARAM wParam, LPARAM lParam)
       {
       #ifdef _WIN32
          WORD wNotifyCode = HIWORD(wParam);
       #else
          WORD wNotifyCode = HIWORD(lParam);
       #endif

          // TODO: Switch on wNotifyCode here.

          return 0;
       }

To maintain platform independence, use conditional compilation blocks to isolate platform dependencies in the code you add to your control. Use the #error statement to flag features that are not implemented for one platform or the other. For example, you might code the previous example like the following if the 32-bit implementation was not complete:

       LRESULT CTestCtrl::OnOcmCommand(WPARAM wParam, LPARAM lParam)
       {
       #ifdef _WIN32
          #error OnOcmCommand parameter decoding not completed for Win32!
       #else
          WORD wNotifyCode = HIWORD(lParam);
       #endif

          // TODO: Switch on wNotifyCode here.

          return 0;
       }

Note that because separate project files are used for 16- and 32-bit targets, all project maintenance will need to be performed for both projects. Project maintenance activities include:

- Adding or removing project files.
- Changing compiler settings.
- Changing linker settings, including input libraries.

Additional query words: kbinf 1.00 2.00 ole control portability

Keywords: KB125242