Ver Mensaje Individual
  #1  
Antiguo 20-06-2011
engranaje engranaje is offline
Miembro
 
Registrado: may 2011
Posts: 163
Reputación: 14
engranaje Va por buen camino
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.

Última edición por ecfisa fecha: 20-06-2011 a las 12:56:02. Razón: Etiquetas [DELPHI] [/DELPHI]
Responder Con Cita