Microsoft Layer dla Unicode
Microsoft Layer for Unicode ( MSLU ) to biblioteka oprogramowania dla starszych wersji systemu Windows, upraszczająca tworzenie programów obsługujących Unicode w systemie Windows 9x ( Windows 95 , Windows 98 i Windows Me ). Jest również znany jako UnicoWS ( Unicode dla systemów Windows 95/98/Me ) lub pod nazwą pliku UNICOWS.DLL .
Microsoft opisał to jako zapewnienie „warstwy interfejsu API Win32 w systemie Windows 95/98 / Me, dzięki czemu programista może napisać pojedynczą wersję Unicode swojej aplikacji i zapewnić jej prawidłowe działanie na wszystkich platformach”. Wcześniej programiści musieli albo udostępniać dwie oddzielne wersje aplikacji, albo wykonywać złożone tłumaczenia ciągów znaków i interfejsu API w czasie wykonywania.
Obecnie UnicoWS może być używany do kompilowania nowszego oprogramowania, które często oczekuje obsługi Unicode (częściowo z powodu wpływowego manifestu „ UTF-8 Everywhere”) dla starszych wersji systemu Windows. UnicoWS może być również używany w czasie łączenia do kompilowania oprogramowania w językach , które nie istniały jednocześnie z Windows 9x i wymagają obsługi Unicode, takich jak Rust .
Istnieją alternatywy, między innymi OPENCOW.DLL , „ The Open Layer for Unicode for Windows ”, porzucone oprogramowanie , ale darmowe ( na licencji MPL 1.1/ GPL 2.0/ LGPL 2.1), będące reimplementacją MSLU przez Mozillę .
Dostępność
MSLU zostało ogłoszone w marcu 2001 roku i po raz pierwszy zostało udostępnione jako warstwa kompatybilności dla kodu obsługującego Unicode, napisanego dla ówczesnego nowego systemu Windows XP RC1 w wydaniu Microsoft Platform SDK z lipca 2001 roku . Spowodowało to krytykę ze strony programistów, którzy uważają, że jest „ za późno ”, ponieważ został wydany długo po szczytowej popularności systemu Windows 9x i zaledwie miesiąc przed wprowadzeniem do produkcji systemu Windows XP. MSLU nadano kryptonim Godot , odniesienie do Czekając na Godota , sztuka skupiająca się na niepowodzeniu człowieka o imieniu „Godot” w przybyciu i niekończącym się czekaniu na niego, ponieważ uważano, że taka warstwa kompatybilności z Unicode - nawet w firmie Microsoft - była już dawno spóźniona.
Jak to działa
Zwykle interfejs API systemu Windows zapewnia zarówno wersje A
( kody specjalne ANSI i znaki ASCII ), jak i W
( znaki „szerokie” ) większości podprogramów . W systemie Windows 9x zaimplementowane są tylko A
, a próba wywołania wersji W
zakończy się niepowodzeniem z kodem błędu wskazującym, że funkcja nie jest zaimplementowana. W linii systemów operacyjnych Windows NT zarówno A
, jak i W
wersje są zaimplementowane (jednak system operacyjny generalnie tylko wewnętrznie implementuje natywnie wersję W
, a wersja A
jest zwykle tłumaczeniem wersji W )
.
Dodając UNICOWS.LIB do wiersza poleceń łącza przed KERNEL32.LIB , ADVAPI32.LIB lub jakąkolwiek inną obsługiwaną biblioteką dowiązań systemowych Win32, konsolidator zamiast tego rozwiąże symbole, do których się odwołuje, z tymi dostarczonymi przez UNICOWS.LIB .
Gdy funkcja znaku dwubajtowego jest wywoływana po raz pierwszy w czasie wykonywania, kod pośredniczący funkcji w UNICOWS.LIB najpierw otrzymuje kontrolę i sprawdza, czy działa w systemie Windows 95/98/Me:
-
Jeśli tak, dynamicznie ładuje bibliotekę UNICOWS.DLL (jeśli jeszcze nie została załadowana) i przekazuje kontrolę do odpowiadającego tam kodu pośredniczącego. Stub thunking tłumaczy argumenty ze znakami dwubajtowymi na ciągi znaków ANSI, a następnie wywołuje natywną
A
z systemu operacyjnego i tłumaczy wszelkie zwrócone ciągi znaków z powrotem na format znaków dwubajtowych. - Jeśli system operacyjny natywnie obsługuje wersję
W (tj. linię systemów operacyjnych Windows NT), to kod pośredniczący funkcji aktualizuje
tablicę symboli w pamięci, tak że przyszłe wywołania będą bezpośrednio wywoływać natywną wersjęW
bez dodatkowych narzutów.
Dzięki tej technice, gdy aplikacja jest połączona z MSLU, tylko systemy Windows 95/98/Me będą musiały polegać na UNICOWS.DLL w czasie wykonywania, a we wszystkich innych wersjach systemu Windows występuje tylko niewielki spadek wydajności przy pierwszym uruchomieniu. Funkcja W
jest wywoływana.
Typowy problem występuje, gdy niektóre pakiety aktualizacji lub programy dezinstalacyjne zmieniają nazwę lub usuwają jedną z bibliotek OLE ( OLEACC.DLL , OLEDLG.DLL ), które są zależnościami biblioteki UNICOWS.DLL . Powoduje to, że niektóre aplikacje, takie jak OpenOffice.org , wyświetlają błąd z komunikatem „Aplikacja nie może zostać uruchomiona, ponieważ nie można znaleźć jednej z wymaganych bibliotek”. Dzieje się tak nawet wtedy, gdy w systemie jest zainstalowany plik UNICOWS.DLL , ponieważ bez jego zależności nie można go uruchomić (patrz także piekło DLL ).
- ^ „Warstwa firmy Microsoft dla Unicode w systemach Windows 95/98/Me” . Globalny portal rozwoju i informatyki . Microsoftu . Zarchiwizowane od oryginału w dniu 16 kwietnia 2003 r . Źródło 25 kwietnia 2019 r .
-
^
Radziwiłowski, Paweł; Galka, Jakow; Nowogród, Sława (2010). „Manifest UTF-8 wszędzie” . Źródło 23 grudnia 2021 r .
{{ cite web }}
: CS1 maint: stan adresu URL ( link ) -
^ a b
Duda, Dennis (26 maja 2020). „Kompilowanie plików binarnych Rust dla systemu Windows 98 SE i nie tylko: podróż” . seri.narzędzia . Źródło 23 grudnia 2021 r .
{{ cite web }}
: CS1 maint: stan adresu URL ( link ) -
^ a b
Kaplan, Michael Scott (12 lutego 2005). „Dlaczego / jak powstało MSLU i nie tylko” . Sortowanie wszystkiego . Blogi Microsoft Developer Network . Zarchiwizowane od oryginału w dniu 4 czerwca 2011 r . . Źródło 22 grudnia 2021 r .
(Czasami ludzie zadają mniej charytatywne wersje pytania, na przykład Dlaczego Microsoft czekał tak długo z MSLU? lub Dlaczego czekałeś z MSLU, aż było za późno? Ale ja pozostanę przy fajnej wersji pytania! ).
-
^ Autorzy
wina (oprogramowania) (26 października 2021). "Wino: dlls/unicows/Makefile.in" . Wino (wersja 6.0.2) . Projekt Wina . Pobrano 23 grudnia 2021 r. – przez Fossies (The Fresh Open Source Software Archive).
{{ cite web }}
: CS1 maint: status adresu URL ( link ) CS1 maint: używa parametru autorów ( link )
Linki zewnętrzne
Microsoftu
- Oficjalne ogłoszenie dostępności
- Artykuł MSDN Magazine opisujący MSLU
- Strony referencyjne dotyczące programowania MSDN
- Wpisy na blogu Michaela Kaplana dotyczące elementów wewnętrznych MSLU
- Pobieranie pakietu redystrybucyjnego MSLU (UNICOWS.DLL)
- Znane błędy w każdej wydanej wersji MSLU — poprzednio obsługiwane przez Michaela Scotta Kaplana, pracownika firmy Microsoft, który był głównym programistą i opiekunem MSLU. ( Kaplan 2005 )
Alternatywy open source
- libunicows — zapewnia licencjonowaną przez MIT wersję tylko biblioteki łączy UNICOWS.LIB, ale nadal wymaga dostarczonej przez Microsoft biblioteki UNICOWS.DLL lub OPENCOW.DLL Mozilli .
- opencow (wcześniej MZLU) — ponownie implementuje bibliotekę linków DLL i LIB jako MPL 1.1/GPL 2.0/LGPL 2.1, oryginalnie dla i przez Mozillę.