Unicode is supported in the Windows 32-bit API by assigning Unicode strings an explicit data type and providing a separate set of entry points and messages to support this new data type. A series of macros and naming conventions is provided that make transparent migration to Unicode support, or even compiling a non-Unicode and Unicode version of an application from the same set of sources, a straightforward matter.
Implementing Unicode as a separate data type allows the compiler's type checking to assure that only functions expecting Unicode strings are called with Unicode parameters.