BITMAP、OEMPSなどに関して引用した引用は、これらのサンプルがドライバープラグインの構造のみを示しており、出力を生成しないことを意味します。しかし、それは彼らができないという意味ではありません。ドライバープラグインを作成する場合は、これらのサンプルの1つから始めて、必要なことを実行するコードを追加することをお勧めします。
プリンタの追加ウィザードではエラーレポートが非常に貧弱であるため、プリントドライバのインストールには注意が必要です。それがあなたに与えるのはWin32エラーコードだけです。たとえば、必要なファイルが欠落している場合は、エラーコード0x2が表示されます。これは、ファイルが欠落していることを意味します。ただし、どのファイルが欠落しているかはわかりません。これは非常にイライラする可能性があります。ただし、これらのサンプルはインストールできますので、ご安心ください。一般に、.infファイルにリストされているすべてのファイルが.infファイルと同じディレクトリに存在する必要があります。ほとんどの場合、これは1つまたは2つのDLLに加えて、.iniおよび.gpdまたは.ppdファイルになります。たとえば、汎用テキストドライバをビルドしてインストールしました。また、そのドライバーのインストールに関する優れたチュートリアルをここで見つけました。
したがって、一般的なテキストサンプルから始めることをお勧めします。ビルドしてインストールしたら、pscriptドライバーに取り組みます。それらが提供する.infファイルを変更したり、.rcファイルや証明書をいじったりしないでください。証明書は必要ありません。
プリンターの追加ウィザードを使用する代わりに、 AddPrinterDriverおよびAddPrinter関数を使用してドライバーを直接インストールすることもできます。これはもっと複雑ですが、より詳細に制御でき、発生しているエラーとその理由を正確に確認できるため、私はそれを好みます。.infファイルは必要ありません。以下は、ドライバーをインストールし、そのドライバーを使用してプリンターを作成する作業コードの一部です。わかりやすくするために、ファイルのエラーチェックとコピーは削除されました。
char driverPath[MAX_PATH];
DWORD needed;
GetPrinterDriverDirectory(0, 0, 1, (UCHAR *)driverPath, sizeof(driverPath), &needed);
// **copy all necessary files to driverPath here**
// format all file names with full paths
char driverSrc[MAX_PATH];
sprintf_s(driverSrc, "%s\\%s", driverPath, psDriverFile);
char driverUISrc[MAX_PATH];
sprintf_s(driverUISrc, "%s\\%s", driverPath, psUIFile);
char driverPPDSrc[MAX_PATH];
sprintf_s(driverPPDSrc, "%s\\%s", driverPath, psPPDFile);
char helpFileSrc[MAX_PATH];
sprintf_s(helpFileSrc, "%s\\%s", driverPath, psHelpFile);
// initialize the DRIVER_INFO struct
DRIVER_INFO_3 di;
memset(&di, 0, sizeof(di));
di.cVersion = 3;
di.pEnvironment = "Windows x64";
di.pDriverPath = driverPath;
di.pName = "MyDriver";
di.pDefaultDataType = "RAW";
di.pDataFile = driverPPDSrc;
di.pConfigFile = driverUISrc;
di.pHelpFile = helpFileSrc;
di.pDependentFiles = pszDependentFiles;
// add the driver
AddPrinterDriver(0, 3, (LPBYTE)&di);
// create the printer
PRINTER_INFO_2 pi;
memset(&pi, 0, sizeof(pi));
pi.pPrinterName = (LPSTR)pPrinterNames->at(i);
pi.pDriverName = "MyDriver";
pi.pPrintProcessor = "winprint";
pi.Attributes = PRINTER_ATTRIBUTE_LOCAL;
pi.pDatatype = "RAW";
pi.pPortName = "LPT1:";
HANDLE hPrinter = AddPrinter(0, 2, (LPBYTE)&pi);