Компилирование вашего приложения с Microsoft Layer for Unicode
Подпрограмма Microsoft Layer for Unicode доступна, без ограничений для свободного распространения с сайта http: // www.microsoft.com/msdownload/platformsdk/sdkupdate/psdkredist.htm . Эта загрузка включает в себя библиотеку UnicoWS.dll. Библиотека UnicoWS.lib содержится в Платформе SDK.
Чтобы скомпилировать приложение, которое использует MSLU
Обратите внимание! на то, что то, что Microsoft Layer for Unicode автоматически не загружается из каталогов $ (WINDOWS) или $ (WINSYS). Поэтому, не помещайте UnicoWS.dll там, если Вы запускаетесь не из системного процесса, который расположен там. Вместо этого, сохраните UnicoWS.dll в вашем каталоге прикладной программы и вызовите LoadLibrary самостоятельно, чтобы гарантировать, что загрузите .dll корректно. |
Когда Вы выполните эти шаги, Microsoft Layer for Unicode загрузится самостоятельно при помощи вызова функции LoadLibrary. Однако, если Вы хотите управлять загрузкой библиотеки UnicoWS.lib, то должны выполнить перечисленные ниже дополнительные шаги. (Эти шаги также необходимы и тогда, если Вы используете параллельные трансляции.)
Чтобы управлять загрузкой MSLU или использовать параллельные трансляции
#ifdef _cplusplus extern "C" { #endif extern FARPROC _PfnLoadUnicows = (FARPROC) &LoadUnicowsProc; #ifdef _cplusplus } #endif |
Обратите внимание! на то, что LoadUnicowsProc вызывается только в Windows 95/98/Me. А также, LoadUnicowsProc вызывается перед вызовом DllMain с флажком PROCESS_ATTACH, а для .exe, перед WinMain. |
HMODULE LoadUnicowsProc(void); |
HMODULE LoadUnicowsProc(void) { return(LoadLibraryA("unicows.dll")); } |
Обратите внимание! на то, что Вы должны вызвать LoadLibraryA и все другие Ansi API явно. Это делается потому, что компилирование определяет API как Unicode, подобно тому, что LoadLibrary определяется как LoadLibraryW. Дополнительную информацию, см. Соглашения для прототипов функций. |
Если Вы загружаете Unicows.lib этим способом, Вы никогда не должны вызывать любую из API, которые Microsoft Layer for Unicode переносит сама. Такое выполнение ведет к переполнению стека, потому что ваш повторный вызов вызывает загрузчик, который вызывает ваш повторный вызов, и т.д.