플러그 인 만들기
Important
최신 인쇄 플랫폼은 Windows에서 프린터와 통신하는 데 선호되는 수단입니다. 프린터 장치 개발을 위해 Windows 10 및 11의 인쇄 환경을 사용자 지정하려면 MICROSOFT의 IPP 받은 편지함 클래스 드라이버와 PSA(인쇄 지원 앱)를 사용하는 것이 좋습니다.
자세한 내용은 최신 인쇄 플랫폼 및 인쇄 지원 앱 디자인 가이드를 참조하세요.
모든 프린터 드라이버 플러그 인은 DllMain, DllGetClassObject 및 DllCanUnloadNow 함수를 정의해야 합니다. 또한 IClassFactory COM 인터페이스와 IPrintOemUI, IPrintOemUI2, IPrintOemUni, IPrintOemUni2, IPrintOemUni3, IPrintOemPS 또는 IPrintOemPS2 COM 인터페이스 중 하나를 구현해야 합니다.
사용자 인터페이스 플러그 인 또는 렌더링 플러그 인을 만들 때는 WDK에 제공된 샘플 UI 플러그 인 또는 샘플 렌더링 플러그 인에 코드를 기반으로 해야 합니다.
두 가지 유형의 플러그 인을 만들려면 다음을 수행해야 합니다.
DllMain 함수를 정의합니다(Windows SDK 설명서에 설명됨).
모든 Win32 DLL의 진입점입니다.
DllGetClassObject 함수를 정의하고 내보냅니다(Windows SDK 설명서에 설명됨).
프린터 드라이버는 이 함수를 호출하여 플러그 인의 IClassFactory 인터페이스 구현에 대한 액세스 권한을 얻습니다(Windows SDK 설명서에 설명됨). 드라이버가 DllGetClassObject를 호출할 때 다음 클래스 식별자 중 하나를 지정합니다(prcomoem.h에 정의됨).
CLSID_OEMUI - UI 플러그 인용
CLSID_OEMRENDER - 플러그 인 렌더링
또한 드라이버는 IID_IClassFactory 인터페이스 식별자를 지정합니다.
DllGetClassObject 함수는 샘플 코드에 설명된 대로 해당 IClassFactory 인터페이스의 인스턴스를 만들고 포인터를 반환해야 합니다.
IClassFactory COM 인터페이스를 구현합니다.
IClassFactory 인터페이스의 CreateInstance 메서드는 다음 COM 인터페이스 중 하나의 플러그 인 구현 인스턴스를 만들어야 합니다.
IPrintOemUI, IPrintOemUI2, IPrintOemUni, IPrintOemUni2, IPrintOemUni3, IPrintOemPS 또는 IPrintOemPS2
CreateInstance 메서드의 입력 중 하나는 인터페이스 식별자입니다. 드라이버는 IID_IUnknown 인터페이스 식별자로 CreateInstance를 호출합니다. 즉, CreateInstance 메서드는 샘플 코드에 설명된 대로 만든 인스턴스의 IUnknown 인터페이스(Windows SDK 설명서에 설명됨)에 대한 포인터를 반환해야 합니다.
샘플 코드에 설명된 대로 표준 IUnknown 인터페이스를 포함하여 IPrintOemUI, IPrintOemUI2, IPrintOemUni, IPrintOemUni2, IPrintOemUni3, IPrintOemPS2 COM 인터페이스 중 하나를 구현합니다.
드라이버에서 호출할 구현된 메서드 중 첫 번째는 IUnknown 인터페이스의 QueryInterface 메서드입니다(Windows SDK 설명서에 설명됨). 이 메서드는 입력 인수로 프린터 드라이버에 대 한 인터페이스 식별자 중 하나를 수신 합니다. 드라이버는 메서드를 호출하여 플러그 인에서 지원되는 인터페이스 버전을 확인하고 지원되는 인터페이스에 대한 포인터를 받습니다.
DllCanUnloadNow 함수를 정의하고 내보냅니다(Windows SDK 설명서에 설명됨).
DllCanUnloadNow 함수는 플러그 인 구현 IPrintOemUI, IPrintOemUI2, IPrintOemUni, IPrintOemUni2, IPrintOemUni3, IPrintOemPS 또는 IPrintOemPS2 COM 인터페이스의 모든 인스턴스가 릴리스된 경우 S_OK 반환해야 합니다. S_OK 반환은 플러그 인을 언로드할 수 있음을 드라이버에 나타냅니다.
프린터 드라이버가 플러그 인 DLL을 언로드할 때 먼저 플러그 인의 DllCanUnloadNow 함수를 호출합니다. DllCanUnloadNow에서 반환된 값에 관계없이 프린터 드라이버는 FreeLibrary 함수를 호출하여 플러그 인 DLL을 언로드합니다. 드라이버가 언로드되기 전에 플러그 인 DLL이 언로드되도록 하기 위해 수행됩니다.
플러그 인 DLL이 로드된 상태를 유지해야 하는 경우(예: 플러그 인 DLL을 사용하는 스레드를 만들 때) 스레드는 LoadLibrary 함수 호출을 사용하여 DLL을 로드해야 합니다. 스레드가 DLL로 완료되면 FreeLibraryAndExitThread 함수를 호출하여 언로드해야 합니다. 스레드가 LoadLibrary를 호출한 상황에서는 드라이버가 FreeLibrary를 호출하면 DLL의 참조 수가 감소하여 언로드되지 않습니다. LoadLibrary, FreeLibrary 및 FreeLibraryAndExitThread 함수는 Windows SDK 설명서에 설명되어 있습니다.