Компилирование вашего приложения с Microsoft Layer for Unicode


Подпрограмма Microsoft Layer for Unicode доступна, без ограничений для свободного распространения с сайта http: // www.microsoft.com/msdownload/platformsdk/sdkupdate/psdkredist.htm . Эта загрузка включает в себя библиотеку UnicoWS.dll. Библиотека UnicoWS.lib содержится в Платформе SDK.

Чтобы скомпилировать приложение, которое использует MSLU

  1. Добавьте ниже перечисленные два файла к вашему проекту:
  2. Добавьте ниже перечисленное к опциям компоновки вашего приложения (обратите внимание! на то, что эти библиотеки не отделены запятыми, потому что именно так Вы добавляете их к списку компоновки):
  3. Компилируйте ваше приложение. Если Вы используете параллельную трансляцию, то должны определить MICROSOFT_LAYER_FOR_UNICODE как 1.

Когда Вы выполните эти шаги, Microsoft Layer for Unicode загрузится самостоятельно при помощи вызова функции LoadLibrary. Однако, если Вы хотите управлять загрузкой библиотеки UnicoWS.lib, то должны выполнить перечисленные ниже дополнительные шаги. (Эти шаги также необходимы и тогда, если Вы используете параллельные  трансляции.)

Чтобы управлять загрузкой MSLU или использовать параллельные трансляции

  1. Добавьте нижеследующий код в ваше приложение:
    #ifdef _cplusplus
    extern "C" 
    {
    #endif
    extern FARPROC _PfnLoadUnicows = (FARPROC) &LoadUnicowsProc;
    #ifdef _cplusplus
    }
    #endif
  2. Определите функцию LoadUnicowsProc. Эта функция - определяемая пользователем функция повторного вызова, которая не берет никаких параметров. Загрузчик вызывает её,  когда необходимо загрузить Microsoft Layer for Unicode

    Обратите внимание! на то, что LoadUnicowsProc вызывается только в Windows 95/98/Me. А также, LoadUnicowsProc вызывается перед  вызовом DllMain  с флажком PROCESS_ATTACH, а для .exe, перед WinMain.

     
    HMODULE LoadUnicowsProc(void);
     
Ниже следует типичное исполнение LoadUnicowsProc.
 
HMODULE LoadUnicowsProc(void)
{
    return(LoadLibraryA("unicows.dll"));
}

Обратите внимание! на то, что Вы должны вызвать LoadLibraryA и все другие Ansi API явно. Это делается потому, что компилирование определяет API как Unicode, подобно тому, что LoadLibrary определяется как LoadLibraryW. Дополнительную информацию, см. Соглашения для прототипов функций.

Если Вы загружаете Unicows.lib этим способом, Вы никогда не должны вызывать любую из API, которые Microsoft Layer for Unicode переносит сама. Такое выполнение ведет к переполнению стека, потому что ваш повторный вызов вызывает загрузчик, который вызывает ваш повторный вызов, и т.д.

Назад в оглавление темы
На главную страницу темы

Hosted by uCoz