我在下面收集了我打印的PDF文檔屬性的以下功能。 由於某些原因,在Delphi 7(運行XP)中,這很好...但是,當我嘗試使用Windows 7重新編譯Delphi XE時,該函數總是似乎退出失敗... dwRet = IDOK
!PDevMode和DocumentProperties。在Delphi 7 + XE之間遷移時出錯
我注意到我在Delphi 7中的dwNeeded
對象是7332
,而在XE中它是4294967295
!!
任何想法如何快速解決這個問題?
Function TPrintPDF.GetPrinterDevMode (pDevice: PChar): PDevMode;
Var
pDevModeVar : PDevMode;
pDevModeVar2 : PDevMode;
dwNeeded : DWord;
dwRet : DWord;
Begin
{ Start by opening the printer }
If (Not OpenPrinter (pDevice, PrinterHandle, Nil))
Then Result := Nil;
{ Step 1: Allocate a buffer of the correct size }
dwNeeded := DocumentProperties (0,
PrinterHandle, { Handle to our printer }
pDevice, { Name of the printer }
pDevModevar^, { Asking for size, so these are not used }
pDevModeVar^,
0); { Zero returns buffer size }
GetMem (pDevModeVar, dwNeeded);
{ Step 2: Get the default DevMode for the printer }
dwRet := DocumentProperties (0,
PrinterHandle,
pDevice,
pDevModeVar^, { The address of the buffer to fill }
pDevModeVar2^, { Not using the input buffer }
DM_OUT_BUFFER); { Have the output buffer filled }
{ If failure, cleanup and return failure }
If (dwRet <> IDOK) Then Begin
FreeMem (pDevModeVar);
ClosePrinter (PrinterHandle);
Result := Nil;
End;
{ Finished with the printer }
ClosePrinter (PrinterHandle);
{ Return the DevMode structure }
Result := pDevModeVar;
End; { GetPrinterDevMode Function }
'dwNeeded'應聲明爲'LONG'。它已簽署。負值意味着功能失敗。這正是你發生的事情。當您調用「DocumentProperties」時不檢查錯誤。 'DocumentProperties'的Delphi頭文件翻譯很可能是虛假的。 – 2012-07-31 18:35:29
所以我可以使用Int64而不是dwNeeded的DWord? – 2012-07-31 19:04:51
不,就像我說的那樣,它應該被聲明爲'LONG'。我還想知道把垃圾傳給第四和第五參數是否明智。 – 2012-07-31 19:06:41