Compiling Your Application with the Microsoft Layer for Unicode

Compiling Your Application with the Microsoft Layer for Unicode

The Microsoft Layer for Unicode (MSLU) is available as a redistributable from http://www.microsoft.com/downloads/details.aspx?FamilyID=73BA7BD7-ED06-4F0D-80A4-2A7EEAEE17E2&displaylang=en. This download contains the UnicoWS.dll. The UnicoWS.lib is contained in the Platform SDK.

To compile an application that uses MSLU
  1. Add the following two files to your project:
    • UnicoWS.dll -- the Microsoft Layer for Unicode DLL
    • UnicoWS.lib -- the LIB file to which you link
      Note that MSLU does not automatically load from the $(WINDOWS) or $(WINSYS) directories. Thus, do not put UnicoWS.dll there unless you are running from a system process that is located there. Instead, keep the UnicoWS.dll in your application directory and call LoadLibrary yourself to ensure that you load the correct DLL.
  2. Add the following to the link options for your application (note that these libraries are not separated by commas because that is how you add them to the link list):
    • First, add the following: /nod:kernel32.lib /nod:advapi32.lib /nod:user32.lib /nod:gdi32.lib /nod:shell32.lib /nod:comdlg32.lib /nod:version.lib /nod:mpr.lib /nod:rasapi32.lib /nod:winmm.lib /nod:winspool.lib /nod:vfw32.lib /nod:secur32.lib /nod:oleacc.lib /nod:oledlg.lib /nod:sensapi.lib.
    • Then add UnicoWS.lib.
    • Finally, add the following libraries: Kernel32.lib Advapi32.lib User32.lib Gdi32.lib Shell32.lib Comdlg32.lib Version.lib Mpr.lib Rasapi32.lib Winmm.lib Winspool.lib Vfw32.lib Secur32.lib Oleacc.lib Oledlg.lib Sensapi.lib. In this step, omit any libraries listed after Kernel32.lib whose APIs are not used in your application. However, if your application uses another component, such as MFC, ATL, or CRT, be sure to include any libraries on which the component depends.
  3. Compile your application. If you are using side-by-side assemblies, you must define MICROSOFT_LAYER_FOR_UNICODE as 1.
When you follow these steps, MSLU loads itself by calling LoadLibrary. However, if you want to control the loading of the UnicoWS.lib you must perform the following additional steps. (These steps are also necessary if you are using side-by-side assemblies.)
To control loading MSLU or use side-by-side assemblies
  1. Add the following code to your application:
    #ifdef _cplusplus
    extern "C" {
    #endif
    extern FARPROC _PfnLoadUnicows = (FARPROC) &LoadUnicowsProc;
    #ifdef _cplusplus
    }
    #endif
  2. Define the LoadUnicowsProc function. This function is a user-defined callback function that takes no parameters. The loader calls it when needed to load MSLU. Note that LoadUnicowsProc is only called on Windows Me/98/95. Also, LoadUnicowsProc is called before the DllMain PROCESS_ATTACH call and, for an .exe, before WinMain.
    HMODULE LoadUnicowsProc(void);
  3. The following is a typical implementation of LoadUnicowsProc.
    HMODULE LoadUnicowsProc(void)
    {
        return(LoadLibraryA("unicows.dll"));
    }
    Note that you must call LoadLibraryA and all other Ansi APIs explicitly. This is because compiling as Unicode defines APIs like LoadLibrary as LoadLibraryW. For more information, see Conventions for Function Prototypes.
    If you load the Unicows.lib in this manner, you must never call any of the APIs that MSLU itself wraps. Doing so leads to a stack overflow because your callback calls the loader which calls your callback, and so on.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值