Я пытаюсь вызвать документированный метод GetJob () здесь . Я думаю, что сейчас у меня проблемы с синтаксисом процедуры, как вызовом, так и определением. Наконец-то у меня есть что скомпилировать.
[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);
}
В соответствии с документацией здесь кажется, что я должен иметь возможность использовать байт [] без какого-либо специального кода маршалинга, потому что он "blittable". В любом случае я получаю исключение во время выполнения, которое говорит:
Невозможно найти точку входа с именем «GetJob» в DLL «winspool.drv».
at NQBB.Printer.PrintQueueMonitor.PrinterWatcher.GetJob (IntPtr hPrinter, Int32 JobId, Int32 Level, Byte [] & pJob, Int32 cbBuf, Int32 & pcbNeeded)
Я думаю, что у меня просто неправильный синтаксис здесь. Кто-нибудь может увидеть проблему?