Microsoft Layer для Юникода
Microsoft Layer for Unicode ( MSLU ) — это программная библиотека для устаревших версий Windows, упрощающая создание программ с поддержкой Unicode в Windows 9x ( Windows 95 , Windows 98 и Windows Me ). Он также известен как UnicoWS ( Unicode для систем Windows 95/98/Me ) или по имени файла , UNICOWS.DLL .
Microsoft описала это как предоставление «прослойки поверх Win32 API в Windows 95/98/Me, позволяющей разработчику программного обеспечения написать единую версию своего приложения в Юникоде и обеспечить ее правильную работу на всех платформах». [1] Раньше разработчикам приходилось либо предоставлять две отдельные версии приложения, либо выполнять сложные преобразования строк и принимать решения API во время выполнения.
В настоящее время UnicoWS можно использовать для компиляции нового программного обеспечения, которое часто предполагает поддержку Unicode, для устаревших версий Windows. [2] UnicoWS также можно использовать во время компоновки для компиляции программного обеспечения на языках , которые не существовали одновременно с Windows 9x и требуют поддержки Unicode, например Rust . [2]
Альтернативы существуют, среди них OPENCOW.DLL , « Открытый уровень Unicode для Windows », бесплатная ( лицензия MPL 1.1/ GPL 2.0/ LGPL 2.1) повторная реализация MSLU от Mozilla .
Наличие [ править ]
MSLU был анонсирован в марте 2001 года и впервые стал доступен в качестве уровня совместимости для кода с поддержкой Unicode, написанного для новой на тот момент Windows XP RC1 в выпуске Microsoft Platform SDK от июля 2001 года . Это вызвало критику со стороны разработчиков, которые считают, что было « слишком поздно », поскольку он был выпущен задолго до пика популярности Windows 9x и всего за месяц до начала производства Windows XP. [3] MSLU было присвоено кодовое имя «Годо» , отсылка к « В ожидании Годо» , пьесе, сосредоточенной вокруг неудачи прибытия человека по имени «Годо» и бесконечного ожидания его, потому что такой уровень совместимости с Unicode считался — даже внутри Microsoft — давно назрели. [3]
Как это работает [ править ]
Обычно Windows API предоставляет оба A
( escape-коды ANSI и ASCII ) и символы W
( «широкий» символ ) версии большинства подпрограмм . В Windows 9x только A
версии реализованы и пытаются вызвать W
версия завершится ошибкой с кодом ошибки, указывающим, что функция не реализована. В линейке операционных систем Windows NT оба A
и W
версии реализованы (однако операционная система обычно только внутренне реализует W
исходная версия, и A
переводом благодаря версия обычно является W
версия).
Добавив UNICOWS.LIB в командной строке ссылки перед ЯДРО32.LIB , ADVAPI32.LIB или любой другой поддерживаемой библиотеки системных ссылок Win32, компоновщик разрешит ссылочные символы с теми, которые предоставлены Вместо этого UNICOWS.LIB .
Когда функция расширенных символов вызывается в первый раз во время выполнения, заглушка функции в UNICOWS.LIB сначала получает управление и проверяет, работает ли он в системе Windows 95/98/Me:
- Если да, то он динамически загружается UNICOWS.DLL (если он еще не загружен) и передает управление соответствующей заглушке. Заглушка Thunking преобразует аргументы расширенных символов в строки ANSI, а затем вызывает встроенный код.
A
версию из ОС и переводит все возвращаемые строки обратно в формат расширенных символов. - Если ОС изначально поддерживает
W
версии (т. е. линейки операционных систем Windows NT), то заглушка функции обновляет таблицу символов в памяти , чтобы будущие вызовы напрямую вызывали собственнуюW
версию без каких-либо дополнительных затрат.
Благодаря этому методу, когда приложение связывается с MSLU, только системы Windows 95/98/Me должны будут полагаться на него. UNICOWS.DLL во время выполнения, а во всех других версиях Windows наблюдается лишь небольшое снижение производительности при первом запуске. W
функция вызывается.
Распространенная проблема возникает, когда некоторые пакеты обновлений или программы удаления переименовывают или удаляют любую из библиотек OLE ( OLEACC.DLL , OLEDLG.DLL ), которые являются зависимостями UNICOWS.DLL . [4] Это приводит к тому, что некоторые приложения, такие как OpenOffice.org , отображают ошибку с сообщением «Приложение не может запуститься, поскольку не найдена одна из необходимых библиотек». Это происходит, даже если UNICOWS.DLL установлен в системе, так как не может запуститься без своих зависимостей (см. также DLL hell ).
Ссылки [ править ]
- ^ «Уровень Microsoft для Unicode в системах Windows 95/98/Me» . Портал глобального развития и вычислений . Майкрософт . Архивировано из оригинала 16 апреля 2003 года . Проверено 25 апреля 2019 г.
- ^ Перейти обратно: а б Дуда, Деннис (26 мая 2020 г.). «Компиляция двоичных файлов Rust для Windows 98 SE и других: путешествие» . Сери.инструменты . Проверено 23 декабря 2021 г.
- ^ Перейти обратно: а б Каплан, Майкл Скотт (12 февраля 2005 г.). «Почему/как появился МГЛУ и многое другое» . Разбираем все это . Блоги сети разработчиков Microsoft . Архивировано из оригинала 4 июня 2011 года . Проверено 22 декабря 2021 г.
(Иногда люди задают менее снисходительные версии вопроса, например, «Почему Microsoft так долго ждала, чтобы создать MSLU?» или «Почему вы ждали, чтобы создать MSLU, пока не стало слишком поздно?», но я буду придерживаться красивой версии вопроса! ).
- ^ «Вино: dlls/unicows/Makefile.in» . Вино (версия 6.0.2) . Винный проект . 26 октября 2021 г. Проверено 23 декабря 2021 г. - через Fossies (Архив свежего программного обеспечения с открытым исходным кодом).
Внешние ссылки [ править ]
Майкрософт [ править ]
- Официальное объявление о доступности
- Статья в журнале MSDN с описанием MSLU
- Справочные страницы по программированию MSDN
- Записи в блоге Майкла Каплана о внутреннем устройстве МГЛУ
- Загрузка распространяемого файла MSLU (UNICOWS.DLL)
- Известные ошибки в каждой выпущенной версии MSLU , ранее поддерживаемой Майклом Скоттом Капланом, сотрудником Microsoft, который был главным разработчиком и сопровождающим MSLU. ( Каплан 2005 )
Альтернативы с открытым исходным кодом [ править ]
- libunicows — предоставляет лицензированную MIT версию только библиотеки ссылок UNICOWS.LIB, но по-прежнему требует предоставленную Microsoft UNICOWS.DLL или Mozilla OPENCOW.DLL .
- opencow (ранее MZLU) — переопределяет библиотеку ссылок DLL и LIB как MPL 1.1/GPL 2.0/LGPL 2.1, изначально для Mozilla и от нее.