hereに記載されているGetJob()メソッドを呼び出そうとしています。私は呼び出しと定義の両方のルーチンの構文に問題があると思う。私は最終的に次のものをコンパイルする何かを得ました。プリンタドライバライブラリからGetJob()を呼び出すDllImport構文の問題
[DllImport(
"winspool.drv",
EntryPoint = "GetJob",
SetLastError = true,
CharSet = CharSet.Ansi,
ExactSpelling = true,
CallingConvention = CallingConvention.StdCall)]
private static extern bool GetJob
([InAttribute()] IntPtr hPrinter,
[InAttribute()] Int32 JobId,
[InAttribute()] Int32 Level,
[OutAttribute()] out byte[] pJob,
[InAttribute()] Int32 cbBuf,
[OutAttribute()] out Int32 pcbNeeded);
...
...
...
...
const int BUFFER_SIZE = 250;
int pcbNeeed = 0;
unsafe
{
byte[] byteBuffer = new byte[BUFFER_SIZE];
bResult = GetJob(m_PrinterHandle, jobID, 1, out byteBuffer, BUFFER_SIZE, out pcbNeeed);
}
ドキュメントhereによれば、私はそれが「blittable型」であるため、特別なマーシャリングコードなし[]バイトを使用することができる必要がありそうです。いずれにしても、実行時例外が発生する:
DLL 'winspool.drv'で 'GetJob'という名前のエントリポイントを見つけることができません。私はちょうどここに間違っているいくつかの構文を持っていると思う
NQBB.Printer.PrintQueueMonitor.PrinterWatcher.GetJob(バイト[] & pJob、のInt32 cbBuf、のInt32 & pcbNeededのIntPtr hPrinter、のInt32のJobId、のInt32レベル)で 。誰もが問題を見ることができますか?
「GetJobW(Unicode)およびGetJobA(ANSI)」のドキュメントにこのセクションを書き留めておきます。 'ExactSpelling = true'を使用すると、dllimportにA.P.Sを追加しないように指示します。もしあなたがそれらを侮辱しなければ、もっと喜んで助けてくれるでしょう。 –
M $という言葉の使用を中止してください。それは本当に面白くないか巧妙ではありません。 –