Microsoft Layer for Unicode
Encyclopedia
Microsoft Layer for Unicode (or MSLU) is a software library for Windows software developers to simplify creating Unicode
-aware applications for Windows 95
, Windows 98
, or Windows Me
. It is also known as UnicoWS (Unicode for Windows 95/98/Me Systems) or UNICOWS.DLL, or even "cows".
Microsoft describes it as providing "a layer over the Win32 API on Windows 95/98/ME so that you can write a single Unicode version of your application and have it run properly on all platforms." Previously, software developers had to either provide two separate versions of an application, or perform complex string translations and API decisions at runtime.
It had a codename of Godot, which is a reference to the play Waiting for Godot
(centered around the failure of a man named "Godot" to appear and the endless wait for him), because it was felt to be long overdue.
provides both A (ANSI) and W (Wide-character) versions of most functions. On Windows 95/98/ME, only the A versions are implemented and attempting to call a W version will fail with an error code that indicates that function is unimplemented. On Windows NT/2000/XP/2003, both the A and W versions are implemented (however the operating system generally only internally implements the W version natively, and the A version is usually a translation thunk
to the W version).
By adding the UNICOWS.LIB to the link command-line before KERNEL32.LIB, ADVAPI32.LIB, or any other supported Win32 system link library, the linker will resolve referenced symbols with the one provided by UNICOWS.LIB instead.
When a wide-character function is called for the first time at runtime, the function stub in UNICOWS.LIB first receives control and decides if it is running on a Windows 95/98/ME system:
Because of this technique, when an application is linked against MSLU, only Windows 95/98/ME systems will need the UNICOWS.DLL at runtime, and on all other operating systems there is only a slight performance penalty for the first function call.
A common problem encountered occurs when some updaters and uninstallers rename or delete the file oledlg.dll, preventing the operating system from loading unicows.dll. This results in applications, such as OpenOffice.org, reporting that "Application cannot start because one of the required libraries cannot be found." This occurs even if unicows.dll is installed in the system.
Unicode
Unicode is a computing industry standard for the consistent encoding, representation and handling of text expressed in most of the world's writing systems...
-aware applications for Windows 95
Windows 95
Windows 95 is a consumer-oriented graphical user interface-based operating system. It was released on August 24, 1995 by Microsoft, and was a significant progression from the company's previous Windows products...
, Windows 98
Windows 98
Windows 98 is a graphical operating system by Microsoft. It is the second major release in the Windows 9x line of operating systems. It was released to manufacturing on 15 May 1998 and to retail on 25 June 1998. Windows 98 is the successor to Windows 95. Like its predecessor, it is a hybrid...
, or Windows Me
Windows Me
Windows Millennium Edition, or Windows Me , is a graphical operating system released on September 14, 2000 by Microsoft, and was the last operating system released in the Windows 9x series. Support for Windows Me ended on July 11, 2006....
. It is also known as UnicoWS (Unicode for Windows 95/98/Me Systems) or UNICOWS.DLL, or even "cows".
Microsoft describes it as providing "a layer over the Win32 API on Windows 95/98/ME so that you can write a single Unicode version of your application and have it run properly on all platforms." Previously, software developers had to either provide two separate versions of an application, or perform complex string translations and API decisions at runtime.
Availability
The MSLU was announced in March 2001, and first available in the July 2001 edition of Microsoft's Platform SDK, which is arguably long after the peak popularity of Windows 95/98/ME.It had a codename of Godot, which is a reference to the play Waiting for Godot
Waiting for Godot
Waiting for Godot is an absurdist play by Samuel Beckett, in which two characters, Vladimir and Estragon, wait endlessly and in vain for someone named Godot to arrive. Godot's absence, as well as numerous other aspects of the play, have led to many different interpretations since the play's...
(centered around the failure of a man named "Godot" to appear and the endless wait for him), because it was felt to be long overdue.
How it works
Normally, the Windows APIWindows API
The Windows API, informally WinAPI, is Microsoft's core set of application programming interfaces available in the Microsoft Windows operating systems. It was formerly called the Win32 API; however, the name "Windows API" more accurately reflects its roots in 16-bit Windows and its support on...
provides both A (ANSI) and W (Wide-character) versions of most functions. On Windows 95/98/ME, only the A versions are implemented and attempting to call a W version will fail with an error code that indicates that function is unimplemented. On Windows NT/2000/XP/2003, both the A and W versions are implemented (however the operating system generally only internally implements the W version natively, and the A version is usually a translation thunk
Thunk
Thunk may refer to:* Thunk , a piece of code to perform a delayed computation * Thunk : a feature of some virtual function table implementations...
to the W version).
By adding the UNICOWS.LIB to the link command-line before KERNEL32.LIB, ADVAPI32.LIB, or any other supported Win32 system link library, the linker will resolve referenced symbols with the one provided by UNICOWS.LIB instead.
When a wide-character function is called for the first time at runtime, the function stub in UNICOWS.LIB first receives control and decides if it is running on a Windows 95/98/ME system:
- If so, it dynamically loads the UNICOWS.DLL (if it hasn't been loaded yet) and passes control to the corresponding thunking stub in there. The thunking stub translates the wide-character arguments into ANSI strings and then invokes the native A version from the OS, and then translates any returned strings back into wide-character format.
- If the OS natively supports the W version (i.e. Windows NT/2000/XP/2003), then the function stub updates the in-memory import table so that future calls will directly invoke the native W version without any more overhead.
Because of this technique, when an application is linked against MSLU, only Windows 95/98/ME systems will need the UNICOWS.DLL at runtime, and on all other operating systems there is only a slight performance penalty for the first function call.
A common problem encountered occurs when some updaters and uninstallers rename or delete the file oledlg.dll, preventing the operating system from loading unicows.dll. This results in applications, such as OpenOffice.org, reporting that "Application cannot start because one of the required libraries cannot be found." This occurs even if unicows.dll is installed in the system.
Microsoft
- Official announcement of availability.
- MSDN Magazine article describing MSLU
- MSDN programming reference pages
- Michael Kaplan's blog entries about MSLU internals
- Download of MSLU redistributable (UNICOWS.DLL)
- Known bugs in each released MSLU version — maintained by an employee of Microsoft who is the principal developer for MSLU.
Open source alternatives
- libunicows — provides an MIT-licensed version of only the UNICOWS.LIB link-library, but still requires the Microsoft-provided UNICOWS.DLL or the Mozilla OPENCOW.DLL.
- opencow (previously MZLU) — reimplements both the DLL and LIB link-library as MPL 1.1/GPL 2.0/LGPL 2.1, originally for the Mozilla project.