Maximize your applications' NT compatibility

Life was simple before Microsoft released Windows NT. Most users had only 16-bit DOS and Windows applications that ran only on Intel processors. NT supports most 16-bit DOS and Windows applications and runs 32-bit native applications on multiple hardware architectures, such as Intel, Alpha, and MIPS.

In NT environments, application compatibility and support can be confusing. Users waste time and money determining which applications are NT compatible, and they waste time troubleshooting application compatibility problems. Users often ask the following questions about running Win32 applications on NT.

What is a Win32 application?

A Win32 application is a 32-bit application that meets Microsoft's Win32 API standard. This standard ensures that applications can take advantage of Windows features such as graphics, window management, memory management, file I/O, security, networking, and threading. Win32 applications run on one processor or multiple processors and on multiple hardware architectures.

Why do different versions of the Win32 API exist?

An advantage of developing an application to the Win32 API standard is that you can deploy the application to any operating system (OS) that adheres to the standard. To accommodate architectural differences in OSs, subsets (or flavors) of the Win32 API are necessary. Wherever possible (as the OSs' architectures allow), each Win32 API flavor shares a common set of APIs. For example, Windows NT and Windows 95 support multithreaded applications. The Win32 API flavors for NT and Win95 offer the same functions to create and manage threads. In contrast, NT supports native multithreading, but Windows 3.1 does not. The Win32 API subset on Windows 3.1 does not support the Win32 functions for creating and managing threads.

To help differentiate Win32 API flavors, Microsoft established a naming convention in which a trailing character follows the name Win32. For example, Win32s is the Win32 subset for 32-bit applications that run on Windows 3.1. For more detailed documentation about the different flavors of Win32 for each platform, see the Help files that Microsoft provides with its development tools.

The Win32 API standard also exists on non-Microsoft OSs. For example, Digital Equipment provides a Win32 interface for VMS.

What is the portable executable format?

Win32 applications are stored in the portable executable format. No matter which Win32 API flavor a developer uses to write an application, the application has this format. For example, Win32s on Windows 3.1 is a subset of Win32 under Windows NT. Windows 3.1 and NT applications share the portable executable format, so Win32s programs run natively under NT. This rule does not always apply if the machine running NT is not Intel based.

Which operating systems (OSs) run Win32 applications?

OSs that support Win32 applications include Windows NT 3.1 and later, Windows 95, Windows Consumer Electronics (Windows CE), Windows 3.1 (using Win32s), and VMS (using the Affinity program).

Can I run 16-bit DOS and Windows applications on an Alpha Windows NT system?

NT on all platforms supports 16-bit DOS and Windows 3.1 applications (also known as binary compatibility). Therefore, you can run 16-bit applications on an Alpha-based NT platform without rebuilding them.

How do developers create Win32 applications for non-Intel platforms?

To create an executable application for a non-Intel platform, you must use a compiler that supports the creation of applications for the platform. For example, Microsoft has different versions of Visual C++ for each platform. These different versions let you use the same source code to target applications for multiple platforms, such as Intel, Alpha, or a Windows Consumer Electronics (CE) device running an SH3 processor.

How do I determine an application's native processor type?

Native Win32 applications come in different flavors, but they all have the .exe extension. To effectively troubleshoot application compatibility problems, you need to determine what kind of processor the application's developer designed it for.

In NT Explorer, find the application you want to run. Right-click the application, and select Quick View. Screen 1 shows the Quick View window that pops up. This window contains information about the application, including its native platform. Under Technical File Information, the Image File Header section shows information about the application type. This section's layout depends on the application type. For Win32 applications, the Image File Header section shows the machine type. Intel-based Win32 applications' machine type is Intel x86. Alpha-based Win32 applications' machine type is DEC Alpha AXP.

For 16-bit DOS applications, the Quick View window shows the operating system (OS) but not the application type. To verify that an application is a 16-bit DOS application, you must view a detailed listing of the application's files. Open NT Explorer and select View, Details from the toolbar. Screen 2 shows a detailed listing of files in a directory. For 16-bit DOS applications, the words MS-DOS Application appear in the Type column.

How do I run a Win32 Intel application on an Alpha machine?

Win32 applications are source-code compatible. If you try to run an Intel application on an Alpha machine running Windows NT 4.0, you get the error message you see in Screen 3. Earlier versions of NT generate the error message 11 - An attempt was made to load a program with an incorrect format.

Users commonly need to run Intel applications on Alpha machines. For optimal performance, you need to obtain the Alpha versions of your applications. Some applications don't have Alpha versions. To run Win32 Intel applications on your Alpha machine, you need to install special software such as Digital Semiconductor's FX!32.

What is FX!32?

FX!32 is translation software for Alpha systems. It lets users run 32-bit Intel-based Windows applications on Alpha machines. You can download FX!32 for free at http://www
fxdownload.html. (For more information about FX!32, see Brian Gallagher, "FX!32," April 1998.)

What types of applications does FX!32 support?

FX!32 supports standard executables files, screen savers, services, and ActiveX controls. For restrictions on FX!32's functionality, see the FX!32 README document that comes with the software.

Why are Win32 applications that run on different platforms only source-code compatible?

You might think Win32 applications' source-code compatibility is a disadvantage because developers must rebuild applications to run on non-Intel platforms. However, source-code compatible applications give you optimal performance.

Each processor that NT runs on has a machine-readable instruction set. The portable executable format for a Win32 application is the same regardless of platform, but the application's machine-readable instructions are platform specific. For example, an Intel Win32 application contains x86 machine instructions. Performance decreases if the system must convert from one instruction set to another on the fly. When a developer recompiles an application for a specific processor, the application runs more efficiently because it contains the machine-readable instructions for the processor. Developing applications for the Win32 standard lets you target multiple platforms and achieve native application performance on any platform.

Where can I find additional information about 32-bit applications?

For information about the Win32 API, refer to Microsoft Win32 Programmer's Reference (Microsoft Press). For more information about Win32 development, go to Microsoft's Win32 Web site ( .com/win32dev/). For information about Windows NT application support, refer to Helen Custer's Inside Windows NT (Microsoft Press). For information about running Win32 applications on VMS, go to affinity.