English - United States  

Home




Usenet Posting #35 - Trigeminal Software, Inc. (English)


MSLU: reported bugs and known issues

(The Microsoft Layer for Unicode on Windows 95, 98, and Me Systems)

(Originally posted 27 April 2002; last updated 10 December 2004)

Latest release: 1.1.3790.0

By popular request, this page is going to list known issues that are either under investigation or fixed for a future release. Most issues start life being reported in the microsoft.public.platformsdk.mslayerforunicode newsgroup on the msnews.microsoft.com news server and you can often see discussion about the issues there while they are under investigation.


If you have any questions about or problems with MSLU, whether or not they are related to issues listed below, you should feel free to ask them in the mslayerforunicode newsgroup (available via both NNTP and HTML). You can also come by with good news, if you want to. :-)



Hide issues that have been investigated for fix in a future release

  • The latest Platform SDK contains a UnicoWS.lib file that was build using the VC++ 7.0 compiler, and the format is not 100% compatible with the linker in VC++ 6.0. In order to use the .LIB file, you need to either not use the /DEBUG flag or use VC++ 7.0. This problem will be addressed in the next PSDK update.




Show issues that have been reported and are currently under investigation


Hide issues that are known but are not currently being considered for fix

  • On a Windows 95 system with no net installed, no mpr.dll is on the system. This will cause a LoadLibrary() of unicows.dll to fail since it cannot bind to any of the WNet* functions that MSLU needs. The easy workaround is to just install the net on the target Win95 machine -- I have not seen such a machine in years and can't imagine that such machines are installing new software....


  • If you have a RichEdit control supporting Unicode (using the RichEd20W class name) and you attempt to use the GetWindowTextW API or the WM_GETTEXT message to retrieve the text it contains, the text will be garbled. A fix is not currently under consideration because the EM_GETTEXTEX message is available and will work properly, and it will not convert the text via the default system codepage the way that MSLU would for WM_GETTEXT or GetWindowTextW.


  • When MSLU's BeginUpdateResourceW and BeginUpdateResourceA APIs are called on binaries with no resources with the bDeleteExistingResources parameter set to FALSE, MSLU's call to LoadLibraryExA with the LOAD_LIBRARY_AS_DATAFILE flag to enumerate existing resources will fail and GetLastError() will return ERROR_BAD_FORMAT. This is a limitation of the Win9x function and there is no workaround for this, other than to simply pass TRUE when there are no resources in the binary upon which you plan to call the resource updating functions (since MSLU cannot afford to risk calling without LOAD_LIBRARY_AS_DATAFILE and causing code to run).

Show issues fixed by v. 1.1.3790.0


Show issues fixed by v. 1.0.4018.0


Show issues fixed by v. 1.0.4011.0


Hide issues fixed by v. 1.0.3703.0

  1. On DBCS platforms, functions such as GetGlyphOutlineW cause MSLU to convert the uChar parameter to call GetGlyphOutlineA. Unfortunately, it does not properly pack the parameter to represent the multibyte character (as described in the MSKB in Q244046). This bug also affects GetCharABCWidthsW, GetCharABCWidthsFloatW, and GetCharWidthFloatW.


  2. In the DrawTextW wrapper, MSLU is not recognizing that uiFlags might have other values combined with it and is checking for DST_TEXT and DST_PREFIXTEXT via simple equality. This will cause problems if any of the DSS_* state values are used.


  3. In the GetMonitorInfoW wrapper, MSLU is not properly copying the dwFlags member, which will cause the API to fail if you do not have multiple monitors. A code workaround has been posted in the microsoft.public.platformsdk.mslayerforunicode newsgroup by our new MVP Ted W!


  4. GetOutlineTextMetricsW is designed to return the size of the required buffer when lpOTM is NULL and a non-zero value when it is not and information is copied to it. MSLU, however, is assuming that it will return the size of the returned buffer in the latter case, and it is using that value to decide how much to copy. This causes it to copy nothing, even though the call with lpOTM == NULL succeeds and MSLU's GetOutlineTextMetricsA call when lpOTM != NULL succeeds, too.


  5. When sndPlaySoundW is called with the SND_MEMORY parameter (which means the parameter specified by lpszSoundName points to an image of a waveform sound in memory rather than a filename), the function call fails due to an inappropriate attempt to convert. As a workaround, you can use sndPlaySoundA with no loss of functionality, since there are no Unicode parameters in this scenario anyway.


  6. The GetMenuItemInfoW function sometimes returns ANSI strings rather than Unicode ones. The workaround is to either use the GetMenuItemInfoA function or to use the MSLU GetMenuStringW function, which will work properly here. An error affecting InsertMenuItemW and SetMenuItemW was fixed at the same time (the MENUITEMINFO.cch member was being used to get the string length even though setting it is not required in those APIs).


  7. The WNetGetUniversalNameW API is having the lpLocalPath parameter converted on the way in but is not converting the lpBuffer parameter (containing a UNIVERSAL_NAME_INFOW or REMOTE_NAME_INFOW structure) on the way out.


  8. If the GetProcAddress function is called when all of the following is true:
    1. you are using the MSLU loader;
    2. are running on Win9x;
    3. UnicoWS.dll is not present;
    4. the second parameter is an ordinal rather than a string;
    5. this call happens before you exit due to UnicoWS.dll not being present.
    then you will crash. The workaround is of course to make sure that any one of those points is not true (especially the last three!).


  9. Several of the RAS APIs are returning failure erroneously. This is caused by improper structure size checks in different versions of Windows. Affected APIs include RasDialW, RasEnumConnectionsW, RasEnumEntriesW, RasGetEntryDialParamsW, RasGetEntryPropertiesW, and RasSetEntryDialParamsW.


  10. The GetTabbedTextExtentW API is not properly adjusting the nSize parameter on DBCS platforms, which can lead to MSLU passing incorrect nSize value when it calls the GetTabbedTextExtentA API for double-byte strings.


  11. The TabbedTextOutW API has a similar problem with its nCount parameter on DBCS platforms.


  12. The resource updating functions (BeginUpdateResourceW, UpdateResourceW, and EndUpdateResourceW) have had problems with crashing reported in a few different (conflicting) circumstances, most commonly when the bDeleteExistingResources parameter is FALSE.

Show issues fixed by v. 1.0.3665.0


This page is obviously not on the Microsoft web site, but it is maintained by an employee of Microsoft who is the principal developer for MSLU. Certain factors beyond normal control can cause there to be a difference between what you see here and what is eventually released. As they say, this posting is provided "AS IS" with no warranties, and confers no rights. With that said, best efforts to keep this page accurate will be made any time such a difference does, in fact, exist.


Back to Usenet Musings


Problems with this site? Please contact the webmaster@trigeminal.com
with your comments, questions, or suggestions.