我有一个 dll,其中有打印单元。
在我的应用程序中,我导出了开始、结束打印过程以及打印文档的方法。
对 dll 的调用如下:
1-> begin printing and print document
2-> print document
3-> end printing.
我在每个打印页面(托盘、方向等)之前更改设置当我再次调用 (2) 并尝试更改打印机设置时,步骤 1 成功完成,方法:用于开发模式结构的 ResetDc 返回 false ...
问题是当我在 1 次调用后回到应用程序中时,应用程序打印机单元更改了某些内容,从而阻止了 dll 中的后续调用?
如何解决问题?
编辑
这是设置页面设置的功能。当进行 1 次调用时(来自上面的列表)ResetDC 成功执行,但在下一次调用中 ResetDC 返回 false。为什么 ... ?
function PRPageSetup(paperSize: Integer = DMPAPER_A4): Boolean;
var
pDevice: pChar;
pDriver: pChar;
pPort: pChar;
hDMode: THandle;
PDMode: PDEVMODE;
PrnHandle: THandle;
begin
result := false;
GetMem(pDevice, cchDeviceName);
GetMem(pDriver, MAX_PATH);
GetMem(pPort, MAX_PATH);
Printer.GetPrinter(pDevice, pDriver, pPort, hDMode);
if hDMode <> 0 then
begin
pDMode := GlobalLock(hDMode);
if pDMode <> nil then
begin
pDMode^.dmFields := pDMode^.dmFields or DM_PAPERSIZE or DM_ORIENTATION;
pDMode^.dmPaperSize := paperSize;
if Printer.Printing then
PrnHandle := printer.Canvas.Handle
else
PrnHandle := Printer.Handle;
if ResetDc(PrnHandle, pDMode^) <> 0
then PRCanReset := true
else PRCanReset := false;
Result := true;
GlobalUnlock(hDMode);
end;
end;
FreeMem(pDevice, cchDeviceName);
FreeMem(pDriver, MAX_PATH);
FreeMem(pPort, MAX_PATH);
end;