PDA

Ver la Versión Completa : Problema con OCX impresor fiscal Epson


oliverinf
02-09-2005, 01:17:10
Hola gente del foro.... les comento cual es el problema que tengo, que la verdad me está volviendo loco ya que he probado de todo y no se que mas hacer.

Estoy utilizando el OCX de Epson para comunicarme con un controlador fiscal Epson, y tengo el siguiente problema (escribo unas lineas de código de ejemplo)

Procedure <XXXXX>
var PrnFisc : _PrinterFiscalDisp;
Aux:WideString;
begin
inherited;
//Crear obj. de comunicación con el controlador y setear parametros.
PrnFisc := CreateComObject(CLASS_PrinterFiscal) as _PrinterFiscalDisp;
PrnFisc.PortNumber := 1;
PrnFisc.BaudRate := '9600';

Aux:= 'LInea a imprimir';
PrnFisc.OpenNoFiscal;
prnfisc.SendNoFiscalText(Aux);
prnfisc.CloseNoFiscal;
MessageDlg('error', mtInformation, [mbOk], 0);
end;

Ojo tener en cuenta que solo es un ejemplo, no le busquen sentido porque está la linea del MessageDlg, ahora paso a explicar...

Lo que hago es, crear la instancia que se comunica con el controlador, abrir doc. no fiscal , imprimir linea y cerrar No fiscal.
Despues muestro el cartel, Hasta aca todo bien pero cuando cierro la aplicación me tira este tipo de error:

" Error de aplicación : La instrucción en "0x21c14667" hace referencia a la memoria en "0x21c14667". La memoria no se puede "read"."

Lo raro es que si saco la linea "MessageDlg('error', mtInformation, [mbOk], 0);", el error no me lo dá.

Es más (otra cosa que más me confunde), si inserto un punto de corte justo en la linea indicada cuando estoy haciendo debbug, tampoco me lo tira.

Alguien me puede explicar que está pasando ? :)

PD. Trabajo en D7 y WinXP.

Saludos a todos y espero que se entienda....

delphi.com.ar
02-09-2005, 14:54:47
Probá asignando Nil a PrnFisc antes de terminar el procedimiento, (Unassigned si lo llegas a tratar como Variant), y como extra despues de esto, prueba agregando un Application.ProcessMessages;

Saludos!

oliverinf
02-09-2005, 15:43:01
Gracias por responder Delphi.com.ar.
Te comento que ya probé hacer lo que me dijiste (el unansigned no lo toma porque no es variant).

La verdad que estoy bastante confundido con lo que pasa.

Te comento lo que probé:
En vez de declarar la variable PrnFisc local al procedimiento, la declaré en la sección private del form y en el formCreate hice lo siguiente:

procedure TfrmPrincipal.FormCreate(Sender: TObject);
begin
inherited;
PrnFisc := CreateComObject(CLASS_PrinterFiscal) as _PrinterFiscalDisp;
PrnFisc.PortNumber := 1;
PrnFisc.BaudRate := '9600';
MessageDlg('Creado', mtInformation, [mbOk], 0);
end;

Cuando inserto la linea MessageDlg('Creado', mtInformation, [mbOk], 0);, no tira el error, pero si la comento si lo tira.

" Error de aplicación : La instrucción en "0x21c14667" hace referencia a la memoria en "0x21c14667". La memoria no se puede "read"."

????? la verdad que estoy muy , pero muy confundido, ya no se que pensar ni hacer...

Por las pruebas que hice, indudablemente hay un problema con la asignación de memoria. Ahora, no se como resolverlo porque ni siquiera sé como empezar.... estoy desesperado...

Si se te ocurre algo más te lo voy a agradecer.

delphi.com.ar
02-09-2005, 16:01:19
¿No estas usando funciones de manejo de memoria tipo Move, CopyMemory, ZeroMemory, FillChar?...
¿Si no pones el MessageDlg en que línea se produce el error?...
¿Hay seguridad de que funcione bien la OCX?...

oliverinf
02-09-2005, 16:27:48
¿No estas usando funciones de manejo de memoria tipo Move, CopyMemory, ZeroMemory, FillChar?...
¿Si no pones el MessageDlg en que línea se produce el error?...
¿Hay seguridad de que funcione bien la OCX?...
No estoy usando funciones del tipo que mencionas.
Si no pongo el MessageDlg no tira el error, y si lo inserto al MessageDlg tira el error al cerrar la aplicación. No la tira en una linea en particular, de hecho, la funcionalidad (por ejemplo imprimir un documento No fiscal funciona OK), pero al cerrar la apllicación tira el error.

Con respecto al OCX, no te lo puedo asegurar que pasa en el D7, lo que si te puedo asegurar que el mismo OCX en aplicaciones para Micrsoft Visual Fox 6 funciona bien.

Lo que me resulta raro, es que diablos???? (por no decir otra palabra) tiene que ver que yo inserte o no el MessageDlg.

Saludos,

mcastrog
10-09-2005, 21:16:27
hola,


ensaya asi:
crea el objeto
try
proceso
..

finally
cierras el objeto
end;

Tal vez te ayude a cerrar el proceso y no mande error

oliverinf
14-09-2005, 14:26:54
Hola, mcastrog, te comento que tambien lo he probado y nada... la verdad que estoy desesperado....

Akkan
14-09-2005, 16:45:58
Hola Oliverinf

Yo tengo un código en que imprimo con unas TMU 200 y me ha funcionado OK! donde se envían los comandos directos por el puerto COM.

Si te interesa me avisas.

:)

CartoneroWeb
17-10-2005, 21:01:57
Amigos: No consigo hacer andar el OCX con Delphi 7. No obtengo respuestas de la impresora, salvo que el puerto lo abre normalmente.
Ayudas y sugerencias serán muy bien recibidas!

cmschneider
12-01-2007, 23:24:32
Hola Oliverinf. Te cuento que yo también tengo el mismo problema. Luego de mucha prueba y error he encontrado un método para que desaparezca el problema pero no se justificar bien que es lo que hace. En el evento OnClose asigno a la variable PrnFisc el valor nulo, vuelvo a crear el objeto Com y lo vuelvo a poner Nulo, de esta forma:

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
PrnFisc:=Nil;
PrnFisc := CreateComObject(CLASS_PrinterFiscal) as _PrinterFiscalDisp;
PrnFisc := Nil;
Application.ProcessMessages;
Action:=caFree;
end;

Espero que te sea de alguna ayuda