Bagikan melalui


Membuat Plug-In

Penting

Platform cetak modern adalah sarana komunikasi pilihan Windows dengan printer. Kami menyarankan agar Anda menggunakan driver kelas kotak masuk IPP Microsoft, bersama dengan Print Support Apps (PSA), untuk menyesuaikan pengalaman cetak di Windows 10 dan 11 untuk pengembangan perangkat printer.

Untuk informasi selengkapnya, lihat Platform cetak modern dan panduan desain aplikasi dukungan Cetak.

Semua plug-in driver printer harus menentukan fungsi DllMain, DllGetClassObject, dan DllCanUnloadNow. Mereka juga harus menerapkan antarmuka IClassFactory COM dan salah satu antarmuka IPrintOemUI, IPrintOemUI2, IPrintOemUni, IPrintOemUni2, IPrintOemUni3, IPrintOemPS, atau IPrintOemPS2 COM.

Saat Anda membuat plug-in antarmuka pengguna atau plug-in penyajian, Anda harus mendasarkan kode Anda pada plug-in UI sampel atau plug-in penyajian sampel yang disediakan di WDK.

Untuk membuat salah satu jenis plug-in, Anda harus melakukan hal berikut:

  1. Tentukan fungsi DllMain (dijelaskan dalam dokumentasi Windows SDK).

    Ini adalah titik masuk untuk semua DLL Win32.

  2. Tentukan dan ekspor fungsi DllGetClassObject (dijelaskan dalam dokumentasi Windows SDK).

    Pengandar pencetak memanggil fungsi ini untuk mendapatkan akses ke implementasi plug-in antarmuka IClassFactory (dijelaskan dalam dokumentasi Windows SDK). Ketika driver memanggil DllGetClassObject, driver menentukan salah satu pengidentifikasi kelas berikut (ditentukan dalam prcomoem.h):

    CLSID_OEMUI - untuk plug-in UI

    CLSID_OEMRENDER - untuk merender plug-in

    Driver juga menentukan pengidentifikasi antarmuka IID_IClassFactory.

    Fungsi DllGetClassObject harus membuat instans antarmuka IClassFactory-nya dan mengembalikan pointer ke dalamnya, seperti yang diilustrasikan dalam kode sampel.

  3. Terapkan antarmuka IClassFactory COM.

    Metode CreateInstance antarmuka IClassFactory harus membuat instans implementasi plug-in dari salah satu antarmuka COM berikut:

    IPrintOemUI, IPrintOemUI2, IPrintOemUni, IPrintOemUni2, IPrintOemUni3, IPrintOemPS, atau IPrintOemPS2

    Salah satu input metode CreateInstance adalah pengidentifikasi antarmuka. Driver memanggil CreateInstance dengan pengidentifikasi antarmuka IID_IUnknown, yang berarti metode CreateInstance harus mengembalikan pointer ke antarmuka IUnknown instans yang dibuat (dijelaskan dalam dokumentasi Windows SDK), seperti yang diilustrasikan dalam kode sampel.

  4. Terapkan salah satu antarmuka IPrintOemUI, IPrintOemUI2, IPrintOemUni, IPrintOemUni2, IPrintOemUni3, IPrintOemPS, atau IPrintOemPS2 COM, termasuk antarmuka IUnknown standar, seperti yang diilustrasikan dalam kode sampel.

    Metode pertama yang diimplementasikan untuk dipanggil oleh driver adalah metode QueryInterface antarmuka IUnknown (dijelaskan dalam dokumentasi Windows SDK). Metode ini menerima salah satu pengidentifikasi antarmuka untuk driver printer sebagai argumen input. Driver memanggil metode untuk menentukan versi antarmuka mana yang didukung oleh plug-in dan untuk menerima pointer ke antarmuka yang didukung.

  5. Tentukan dan ekspor fungsi DllCanUnloadNow (dijelaskan dalam dokumentasi Windows SDK).

    Fungsi DllCanUnloadNow harus mengembalikan S_OK jika semua instans antarmuka IPrintOemUI, IPrintOemUI2, IPrintOemUni, IPrintOemUni2, IPrintOemUni3, IPrintOemUni3, IPrintOemPS, atau IPrintOemPS2 COM telah dirilis. Pengembalian S_OK menunjukkan kepada driver bahwa plug-in dapat dibongkar.

    Perhatikan bahwa ketika driver printer membongkar DLL plug-in, ia terlebih dahulu memanggil fungsi DllCanUnloadNow plug-in. Terlepas dari nilai yang dikembalikan oleh DllCanUnloadNow, driver printer kemudian membongkar DLL plug-in dengan memanggil fungsi FreeLibrary. Ini dilakukan untuk memastikan bahwa DLL plug-in dibongkar sebelum driver dibongkar.

    Jika DLL plug-in harus tetap dimuat (misalnya, saat membuat utas yang menggunakan DLL plug-in), utas harus memuat DLL, menggunakan panggilan ke fungsi LoadLibrary. Ketika utas selesai dengan DLL, alur harus memanggil fungsi FreeLibraryAndExitThread untuk membongkarnya. Dalam situasi di mana utas telah disebut LoadLibrary, panggilan driver ke FreeLibrary hanya mengurangi jumlah referensi DLL, sehingga mencegahnya dibongkar. Fungsi LoadLibrary, FreeLibrary, dan FreeLibraryAndExitThread dijelaskan dalam dokumentasi Windows SDK.