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 (IntPtr입니다 hPrinter, INT32 작업 ID, INT32 수준, 바이트 [] & pJob, INT32 cbBuf, INT32 & pcbNeeded)
에서 는 난 그냥 잘못 여기에 몇 가지 구문을 가지고 생각합니다. 누구든지 문제를 볼 수 있습니까?
"GetJobW (유니 코드) 및 GetJobA (ANSI)"설명서에서이 절을 참고하십시오. 'ExactSpelling = true'를 사용하면 dllimport가 A.P.S.을 추가하지 않도록 지시합니다. 모욕하지 않으면 사람들이 더 기꺼이 도움을받을 것입니다. –
M $라는 용어 사용을 중단하십시오. 정말 재밌거나 똑똑하지 않습니다. –