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

    技术2022-05-11  117

    夜里肚子饿吃泡面,顺便拿这篇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。若这么做将导致堆栈溢出,因为你的回调函数调用了要调用你的回调函数的加载器,等等。

    最新回复(0)