Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ważne
Nowoczesna platforma drukowania jest preferowanym sposobem komunikacji z drukarkami w systemie Windows. Zalecamy używanie sterownika klasy skrzynki odbiorczej IPP firmy Microsoft wraz z aplikacjami do obsługi drukowania (PSA), aby dostosować środowisko drukowania w systemie Windows 10 i 11 na potrzeby opracowywania urządzeń drukarki.
Aby uzyskać więcej informacji, zobacz Print Support App v1 and v2 design guide (Przewodnik projektowania aplikacji do obsługi wydruku w wersji 1 i 2).
Wykonywanie bibliotek DLL grafiki drukarki w trybie użytkownika zapewnia następujące korzyści w porównaniu z wykonywaniem w trybie jądra:
Nieograniczona przestrzeń stosu.
Dostęp do interfejsów API Win32.
Mniejszy potencjał powodowania awarii systemu.
Łatwiejsze debugowanie przy użyciu debugerów trybu użytkownika.
Lepsze możliwości zmiennoprzecinkowe, ponieważ korzystanie z funkcji zmiennoprzecinkowych graficznych DDI nie jest wymagane.
Możliwość wywoływania niestandardowych bibliotek DLL w trybie użytkownika dostarczonych przez dostawcę, które nie są częścią opisanej architektury sterownika drukarki systemu Microsoft Windows 2000 i nowszej
W systemie Windows Vista nie można zainstalować sterownika drukarki w trybie jądra. Jeśli aplikacja spróbuje to zrobić, funkcje AddPrinterDriver i AddPrinterDriverEx (opisane w dokumentacji zestawu Windows SDK) zakończą się niepowodzeniem z kodem błędu ERROR_KM_DRIVER_BLOCKED.
W poniższej tabeli przedstawiono dozwolone tryby wykonywania sterownika drukarki:
| Wersja systemu operacyjnego | Dozwolony tryb działania biblioteki DLL grafiki drukarki |
|---|---|
| Windows NT 4.0 | jądro |
| Windows 2000 | użytkownik lub jądro |
| Windows XP i Server 2003 | tryb jądra dostępny dla istniejących drukarek; tryb użytkownika wymagany w przypadku nowych instalacji drukarek |
| Windows Vista | użytkownik |
Używanie graficznego identyfikatora DDI w trybie użytkownika
Biblioteka DLL grafiki drukarki w trybie użytkownika nie jest ograniczona do wywoływania usług wsparcia GDI i innych funkcji wywołania zwrotnego grafiki DDI z przedrostkiem Eng. Istnieją jednak pewne reguły, które należy przestrzegać:
Podobnie jak biblioteki DLL grafiki w trybie jądra, biblioteki DLL grafiki w trybie użytkownika muszą wywoływać graficzne identyfikatory DDI, które tworzą lub modyfikują powierzchnię rysunku. Te funkcje zwrotne są usługami wsparcia GDI, a wywoływanie odpowiedników w Win32 tych funkcji rysunkowych nie jest dozwolone.
W przypadku bibliotek DLL trybu użytkownika wywołania zwrotne są przechwytywane przez klienta GDI trybu użytkownika, który następnie przekazuje te wywołania do silnika renderowania grafiki w trybie jądra GDI (GRE).
Poniższa lista graficznych funkcji DDI z prefiksem Eng nie może być wywoływana przez biblioteki DLL trybu użytkownika:
Biblioteki DLL grafiki w trybie użytkownika mogą nadal używać funkcji DDI grafiki dla usług zmiennoprzecinkowych GDI.
Konwertowanie istniejącej biblioteki DLL grafiki drukarki na tryb użytkownika
Jeśli wcześniej utworzono bibliotekę DLL grafiki drukarki, która jest wykonywana w trybie jądra, możesz przekonwertować bibliotekę DLL na wykonywanie w trybie użytkownika. Aby przekonwertować, dodaj funkcję DrvQueryDriverInfo do biblioteki DLL, a następnie postępuj zgodnie z regułami tworzenia biblioteki DLL grafiki drukarki.
Tworzenie nowej biblioteki DLL grafiki drukarki w trybie użytkownika
Aby opracować nową bibliotekę DLL grafiki drukarki, która jest wykonywana w trybie użytkownika, można nadal używać wszystkich funkcji graficznych DDI używanych przez biblioteki DLL trybu jądra. Dostępne są jednak również następujące opcje:
W przypadku funkcji prefiksowanych Eng, które mają dokładne odpowiedniki Win32, zaleca się wywołanie funkcji Win32. W poniższej tabeli zestawiono funkcje z prefiksem 'Eng' wraz z ich odpowiednikami Win32.
Funkcja z prefiksem Eng Odpowiednik win32 EngAllocMem HeapAlloc EngAllocUserMem HeapAlloc EngEnumForms EnumForms EngFreeMem StertaFree EngFreeUserMem StertaFree EngFindImageProcAddress GetProcAddress EngGetForm GetForm EngGetLastError GetLastError EngGetPrinter GetPrinter EngGetPrinterData GetPrinterData EngGetPrinterDriver PobierzSterownikDrukarki EngLoadImage LoadLibrary EngMulDiv MulDiv EngSetLastError SetLastError EngSetPrinterData SetPrinterData EngUnloadImage FreeLibrary EngWritePrinter WritePrinter W przypadku funkcji prefiksowanych Eng, które odpowiadają funkcjom Win32 o podobnych funkcjach, zaleca się również wywoływanie funkcji Win32. W poniższej tabeli wymieniono kilka funkcji z prefiksem Eng wraz z ich odpowiednikami Win32.
Funkcja z prefiksem Eng Odpowiednik win32 EngAcquireSemaphore EnterCriticalSection EngCreateSemaphore Przydziel obiekt CRITICAL_SECTION i zainicjuj go za pomocą wywołania funkcji Win32 InitializeCriticalSection. EngDeleteSemaphore DeleteCriticalSection EngFindResource FindResource EngFreeModule FreeLibrary EngLoadModule LoadLibrary EngMultiByteToWideChar MultiByteToWideChar EngQueryLocalTime GetLocalTime EngReleaseSemaphore ReleaseSemaphore EngWideCharToMultiByte WideCharToMultiByte W przypadku funkcji tworzących lub modyfikujących usługę rysowania nowe sterowniki muszą nadal wywoływać usługi pomocy technicznej GDI , a nie ich odpowiedniki Win32.
Zamiast używać funkcji DDI dla grafiki w usługach GDI Floating-Point, można użyć typu danych FLOAT.