Microsoft Layer для Unicode - Википедия - Microsoft Layer for Unicode

Microsoft Layer для Unicode (или же МГЛУ) это библиотека программного обеспечения для разработчиков программного обеспечения Windows, чтобы упростить создание Unicode -сознательные приложения для Windows 95, Windows 98, или же Windows Me. Он также известен как UnicoWS (Unicoде для Windows 95/98 / Me Sсистемы) или UNICOWS.DLL, или даже «коровы».

Microsoft описывает это как «слой над Win32 API в Windows 95/98 / Me, чтобы вы могли написать единственную версию своего приложения в Юникоде и обеспечить ее правильную работу на всех платформах ».[1] Раньше разработчикам программного обеспечения приходилось либо предоставлять две отдельные версии приложения, либо выполнять сложные переводы строк и API решения во время выполнения.

Доступность

MSLU был объявлен в марте 2001 г. и впервые доступен в выпуске Microsoft Platform SDK в июле 2001 г., который, возможно, намного позже пика популярности.[противоречивый ] из Windows 95/98 / Me.[нужна цитата ]

У него был кодовое название из Годо, который является отсылкой к пьесе В ожидании Годо (в центре внимания неспособность человека по имени «Годо» появиться и бесконечное ожидание его), потому что это было давно пора.[2]

Как это устроено

Обычно Windows API обеспечивает как А (ANSI) и W (расширенные символы) версии большинства функций. В Windows 95/98 / Me только А версии реализованы и пытается вызвать W версия завершится ошибкой с кодом ошибки, указывающим, что функция не реализована. На Windows NT линейка операционных систем, как А и W версии (однако операционная система обычно реализует только внутренние версии W версия изначально, а А версия обычно перевод thunk к W версия).

Добавив UNICOWS.LIB в командную строку ссылки перед KERNEL32.LIB, ADVAPI32.LIB, или любой другой поддерживаемой библиотекой системных ссылок Win32, компоновщик разрешит ссылочные символы с помощью UNICOWS.LIB вместо.

Когда функция для широких символов вызывается в первый раз во время выполнения, заглушка функции в UNICOWS.LIB сначала получает управление и проверяет, работает ли он в системе Windows 95/98 / Me:

  • Если да, он динамически загружает UNICOWS.DLL (если он еще не загружен) и передает управление соответствующей заглушке thunking там. Заглушка thunking переводит аргументы широких символов в строки ANSI, а затем вызывает собственный А версия из ОС, а затем переводит все возвращенные строки обратно в формат расширенных символов.
  • Если ОС изначально поддерживает W версия (то есть линейка операционных систем Windows NT), то заглушка функции обновляет таблицу импорта в памяти, так что будущие вызовы будут напрямую вызывать собственный W версия без дополнительных накладных расходов.

Из-за этого метода, когда приложение связано с MSLU, только системам Windows 95/98 / Me потребуется UNICOWS.DLL во время выполнения и во всех других версиях Windows существует лишь небольшое снижение производительности для первого вызова функции.

Типичная проблема возникает, когда некоторые программы обновления и удаления переименовывают или удаляют файл. OLEDLG.DLL, предотвращая загрузку операционной системы UNICOWS.DLL. Это приводит к появлению таких приложений, как OpenOffice.org, сообщая, что «Приложение не может запуститься, потому что не найдена одна из необходимых библиотек». Это происходит, даже если UNICOWS.DLL установлен в системе.

Рекомендации

  1. ^ «Уровень Microsoft для Unicode в системах Windows 95/98 / Me». Глобальный портал развития и вычислений. Microsoft. Архивировано из оригинал 16 апреля 2003 г.. Получено 25 апреля, 2019.
  2. ^ Каплан, Майкл С. (12 февраля 2005 г.). «Почему / как возник МГЛУ и многое другое». Сортировка всего V .. 2!. Архивировано из оригинал 25 июня 2014 г.. Получено 25 апреля, 2019.

внешняя ссылка

Microsoft

Альтернативы с открытым исходным кодом

  • libunicows - предоставляет лицензированную MIT версию только библиотеки компоновки UNICOWS.LIB, но по-прежнему требует предоставленную Microsoft UNICOWS.DLL или Mozilla OPENCOW.DLL.
  • opencow (ранее MZLU) - повторно реализует библиотеку ссылок DLL и LIB как MPL 1.1 / GPL 2.0 / LGPL 2.1, первоначально для проекта Mozilla.