簡體   English   中英

Delphi XE8 Printe VCL和DocumentProperties奇怪的問題

[英]Delphi XE8 Printe VCL and DocumentProperties strange issue

我正在使用vcl.printers單元(delphi XE8),並且在與打印機“交談”時遇到錯誤。

我跟蹤到vcl.printers,發現以下代碼(由EMB員工編寫):

if OpenPrinter(ADevice, FPrinterHandle, nil) then
 begin
  if DeviceMode = 0 then  // alloc new device mode block if one was not passed in
begin
  DeviceMode := GlobalAlloc(GHND,
    DocumentProperties(0, FPrinterHandle, ADevice, nil, nil, 0));

  if DeviceMode <> 0 then
  begin
    DevMode := GlobalLock(DeviceMode);
    if DocumentProperties(0, FPrinterHandle, ADevice, DevMode^,
      DevMode^, DM_OUT_BUFFER) < 0 then
    begin
      GlobalUnlock(DeviceMode);
      GlobalFree(DeviceMode);
      DeviceMode := 0;
      DevMode := nil;
    end
  end;
end;
if DeviceMode <> 0 then
  SetPrinterCapabilities(DevMode^.dmFields);
end;

DocumentProperties(0, FPrinterHandle, ADevice, nil, nil, 0)

第一次返回正確的緩沖區大小(我沒有在任何地方寫過),然后經過第二次執行時,它返回4294967295字節,實際上為-1,因為聲明錯誤,但表示錯誤。 如您所見,由於沒有錯誤檢查,VCL代碼對錯誤的處理非常差! 但是我在這里有什么錯誤,為什么?

DocumentProperties位於winspool.dll中

要從中恢復,我需要重新啟動PC,但是我不能多次使用該調試程序,這很煩人。 打印機就是“ PDFcreator”

我嘗試在其他PC上運行,即使運行了很多次也似乎還可以。

我也有兩台激光網絡打印機。

謝謝

過去,我確實有兩個客戶遇到相同的問題。 我確實將其跟蹤到打印機部門(printers.pas),而在沒有調試器的情況下很難在我國其他地區的遠程計算機上對其進行跟蹤。

好的..但是我確實一直跟蹤到這一行:

DeviceMode:= GlobalAlloc(GHND,DocumentProperties(0,FPrinterHandle,ADevice,StubDevMode,StubDevMode,0)); 在單位PRINTERS.PAS中的功能SetPrinter中

當我將它分成兩行時,即先調用DocumentProperties並將值存儲在整數變量中,然后檢查該值,然后再調用Globalalloc(如果該值大於0)並使用調試文件中存儲的值對其進行調試如果我沒記錯的話,該錯誤確實在SPOOL.DLL的DocumentProperties函數中。 此函數返回-1作為設備的大小,但僅將此客戶放在一台計算機上(他在我的程序中使用4或5)

在我所有的客戶(近200個客戶)中,我在兩台計算機上都遇到了此問題。 另一個是自己修復的。.我不知道它是如何修復的。 幾分鍾前,我試圖修復的那一個。 最后,我找到了解決方案。 我確實通過簡單地更改快捷方式來修復此客戶。 我開始在Windows 10中使用自動修復程序來實現兼容性,然后運行“測試程序”按鈕,它開始起作用。選擇打印機或使用它的屬性沒有錯誤。 好的..然后我再次嘗試單獨使用快捷方式.. aarrgg ..錯誤返回..但是然后,aha ..我對自己說:“這必須與Windows如何運行此程序有關”,並更改了Windows 10的運行方式。程序作為檢查“以管理員身份運行”以取消選中。

沒問題

在幾乎所有使用Windows 10的計算機上,我都檢查“以管理員身份運行”沒有問題。 我認為spool.dll出現更新或某些問題,將這些點連接在一起。

ps。 如果您用Delphi DocumentProperties問題來搜索此行為,那么您將發現這是已知問題。有人說連接到x86和x64模式,但我發現了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM