Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   problemas de memoria con impresoras en terminal server (https://www.clubdelphi.com/foros/showthread.php?t=74437)

engranaje 20-06-2011 12:18:28

problemas de memoria con impresoras en terminal server
 
No se me ha ocurrido una manera mejor que el título para intentar explicar los que me pasa. Se trata de una aplicacion desarrollada en delphi 2.0 que he tenido que modificar recientemente debido a que no imprimía en citrix. Tras los cambios ya he conseguido que me imprima tanto a traves del quickreport, como utilizando directamente la api para rellenar forumularios en papel preimpreso con impresoras matriciales.

En local no he tenido ningún problema sin embargo tanto en terminal server como en citrix me encuentro con violaciones de acceso repentinas y operaciones con puntero invalidas. No he conseguido un patrón exacto para reproducirlas, pero siempre se dan al imprimir y nunca la primera vez que se imprime, algunas veces es la segunda vez y otras a la 5º o 6º impresión.

Trazando los errores me encuentro con que algunas veces es el getprinter el que da una violación de acceso, otras el freemem que hago al pdevice (pchar con el nombre de la impresora), otras veces pasa sin problemas por todo el proceso y me da la violación de acceso al intentar escribir en una stringlist que uso a modo de log, o al escribir una linea en la impresora que al final llama a esta función:
Código Delphi [-]
function PrintRawData(hPrn : THandle;
                      Buffer : pointer;
                      NumBytes : SpoolInt) : integer;
{$IFDEF WIN32}
var
  BytesWritten : DWORD;
 {$ENDIF}
begin
  if (NumBytes = 0) then
  begin
    Result := 1;
    Exit;
  end;
 {$IFDEF WIN32}
   if (WritePrinter(hPrn,
                    Buffer,
                    NumBytes,
                    BytesWritten) = FALSE) then
   begin
     Result := -1;
     Exit;
   end;
   if (NumBytes <> BytesWritten) then
   begin
     Result := -1;
     Exit;
   end;
   Result := 1;
 {$ELSE}
  result := WriteSpool(hPrn,
                       Buffer,
                       NumBytes);
 {$ENDIF}
end;

El caso es que por mas que intento reproducir estos problemas en local no lo consigo.

ecfisa 20-06-2011 13:07:32

Hola engranaje.

Por favor, cuando incluyas código Delphi encierra el mismo con las etiquetas [delphi] [/delphi] para que sea más legible.

En este enlace se explica su uso: etiquetas vB


Saludos y muchas gracias


La franja horaria es GMT +2. Ahora son las 19:03:57.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi