在98下使用MSLU支持UNICODE(中文版)

夜里肚子饿吃泡面,顺便拿这篇E文做个E文作业,9成里面有错的
使用Microsoft Layer for Unicode编译你的应用程序
Microsoft Layer for Unicode(MSLU)可以从 http://www.microsoft.com/downloads/details.aspx?FamilyID=73BA7BD7-ED06-4F0D-80A4-2A7EEAEE17E2&;;displaylang=en获得。这个下载包含了UnicoWS.dll。而UnicoWS.lib在Platform SDK之中。
使用MSLU编译应用程序
 
1.添加下列两个文件到你的工程:
UnicoWS.lib -- the LIB file to which you link 
UnicoWS.lib -- 用于连接的LIB文件
注意MSLU不能自动从$(WINDOWS)或$(WINSYS)目录加载。因此,除非你运行一个被定位在那儿的系统进程,否则不要把UnicoWS.dll放在那儿。正确的方法是把UnicoWS.dll放在你的应用程序目录,并且亲自调用LoadLibrary以确保你能加载到正确的DLL。
2.在你的程序连接选项中加入下列(注意这些库加入连接列表得用逗号隔开的):
首先,加入这些:/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。
然后加入UnicoWS.lib。
最终,加入这些库: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。在这一步,可以省略Kernel32.lib之后一些在你的程序中不常用的API的库。当然,如果你的程序用到其它组件,例如MFC,ATL或CRT,就需要包含这些组件依赖库。
3.编译你的程序。如果你在使用并行汇编,你必须定义一个值为1的MICROSOFT_LAYER_FOR_UNICODE宏。
当你完成这些步骤后,MSLU就可以靠调用LoadLibrary来加载了。但是,如果你想控制UnicoWS.lib的加载,必须完成下列附加步骤。(这些步骤也是你使用并行汇编所必须的。)
控制加载MSLU或使用并行汇编
1.加入下列代码到你的程序中:
#ifdef _cplusplus
extern "C" {
#endif
extern FARPROC _PfnLoadUnicows = (FARPROC) &LoadUnicowsProc;
#ifdef _cplusplus
}
#endif
2.定义一个LoadUnicowsProc函数。这个函数是一个不带参数的用户定义回调函数。当需要加载MSLU时加载器可以调用它。注意这个LoadUnicowsProc只能在Windows Me/98/95下被调用。同时,LoadUnicowsProc在DllMain PROCESS_ATTACH调用前被调用,在.exe中,于WinMain之前。
HMODULE LoadUnicowsProc(void);
3.接下来是典型的LoadUnicowsProc执行。
HMODULE LoadUnicowsProc(void)
{
    return(LoadLibraryA("unicows.dll"));
}
注意,你必须明确地调用LoadLibraryA和所有其它的Ansi API。这是因为编译Unicode定义API时,像LoadLibrary会生成LoadLibraryW。若要获得更多的信息,请阅读Conventions for Function Prototypes。
如果你这种惯用的方法加载Unicows.lib,你就不能调用任何MSLU内部API。若这么做将导致堆栈溢出,因为你的回调函数调用了要调用你的回调函数的加载器,等等。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值