編集:なぜそれが機能したのかの詳細がわからなくても、問題を解決したようです。この投稿の下の回答を参照してください。
サンプル言語モニター PJLMon をコンパイルしようとしていますが、リンカ エラーによりコードが正常にビルドされません。コード全体を投稿したいと思いますが、それは少し長く (ほとんどの場合、目前の質問とは無関係である可能性があります)、オンラインで簡単に見つけることができます。
問題のエラーは次のとおりです。
問題のコードは、pjlmon.c にあるコードを参照しており、以下に示されています。
VOID
ClearPrinterStatusAndIniJobs(
__in PINIPORT pIniPort
)
{
PORT_INFO_3 PortInfo3;
if ( pIniPort->PrinterStatus ||
(pIniPort->status & PP_PRINTER_OFFLINE) ) {
pIniPort->PrinterStatus = 0;
pIniPort->status &= ~PP_PRINTER_OFFLINE;
ZeroMemory(&PortInfo3, sizeof(PortInfo3));
SetPort(NULL, pIniPort->pszPortName, 3, (LPBYTE)&PortInfo3); // LNK2019 HERE
}
SendJobLastPageEjected(pIniPort, ALL_JOBS, FALSE);
}
プログラムのロジックは一切変更していません。いくつかのヘッダー ファイルをローカルで見つけられるように変更しました (つまり、 #include "winsplp.h" の代わりに ) が、これらのファイルは変更されていないため、これは問題ではないと思います。とにかく、愚かな間違いを犯した場合に備えて、定義とインクルードを表示します。
#define USECOMM
#include "precomp.h"
#include "ntddpar.h"
#include <windows.h>
#undef SetPort
#include <WinReg.h>
#include <winioctl.h>
CLR をオフにしており、プリコンパイル済みヘッダーを使用していません。
Project->Properties->Linker->Input->Additional Dependencies の下に、「winspool.lib; advAPI32.lib」を追加しました。これらのファイルには、winspool.h (windows.h に自動的に含まれる) および winreg.h 内の関数への参照が含まれている必要があります。
#undef SetPort コードは、"SetPort" を "SetPortW" (Unicode) または "SetPortA" (ASCII) に変更するように設定されたマクロを削除します。これは問題ではないと思います。
ここからどこへ行けばいいのか少し迷っています。どんな提案でも大歓迎です!