PDA

Ver la Versión Completa : "Problema de Lectura desde un puerto COM"


Gercondi
07-10-2011, 00:56:08
Saludos,

Estoy teniendo el siguiente problema: Estoy creando una DLL (en Delphi 2010) que incluye un formulario. Ese formulario contiene entre otros un componente COMPORT para leer atravez del puerto COM4 codigos de barras 2D desde un Escaner Honeywell Xenon 1900.

Cuando hago el llamado a la Dll desde otra aplicación realizada en Delphi 2010 hace la lectura del codigo de barra sin problema.

Pero al utilizar la Dll (realizada en Delphi 2010) desde una aplicación desarrrollada en Delphi 2006, aparece el formulario de la Dll, una vez leido el dato tengo que mover el mouse o presionar alguna tecla para que cierre el formulario que genera la DLL y poder utilizar los datos que retorna en otra aplicación.

Alguien tiene idea de que podria estar pasando con la aplicación desarrollada en Delphi 2006 ??? :confused:
Que debo hacer para que no tenga necesidad de mover el mouse para obtener la información ???:confused:

De antemano gracias por la información y el tiempo.

escafandra
07-10-2011, 08:29:06
Habría que ver como está hecha esa dll, en con concreto ese formulario y como se cierra...
No creo que sea problema de delphi 2006.


Saludos.

Neftali [Germán.Estévez]
07-10-2011, 11:24:54
¿Cual es la característica que cierra el formulario de forma automática?
¿Cómo lo cierras? ¿Cuando ha leído?

Ya se que es descabellado y no parece que tenga relación, pero está está el tema de unicode. Es lo que se me ocurre diferente entra ambos (a primeras)
Lo digo porque no se si trabajas con cadenas o cierras el form al leer. Para eso me falta la contestación a las primeras preguntas.

Gercondi
07-10-2011, 15:39:47
Eso es lo que ejecuta el formulario de la DLL :


procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
var
Str : String;
Cadena: AnsiString;
numCad : integer;
CC : integer;
begin
Str := '';
numCad := ComPort1.Buffer.ComPort.InputCount;

Comport1.Buffer.ComPort.ReadStr(Str,numCad);

Cadena := DepurarCadena(Str);

xCedula := trim(copy(Cadena,50,10));
CC := strtoint(xCedula);

xCedula := inttostr(CC);
xPrimerNombre := trim(copy(Cadena,105,10));
xSegundoNombre := trim(copy(Cadena,128,10));
xPrimerApellido := trim(copy(Cadena,60,23));
xSegudoApellido := trim(copy(Cadena,82,23));

Close;
end;


El evento ComPort1RxChar es que se ejecuta cuando disparamos el lector de codigos de barra.

Hago una correccion al mensaje inicial, la Dll tiene el mismo comportamiento en la aplicación desarrollada en delphi 2010 y 2006. Lo que sucedia era que la aplicación donde estaba haciendo la prueba (D2010) tiene un timer y este disparaba un envento cada 5 milisegundos.

escafandra
07-10-2011, 18:06:49
Si no entiendo mal, Tras el paso por el lector de barras se abre el formulario. Después debería cerrarse pero no lo hace.

No muestras como se abre, si es un formulario autocreado o no, si es modal...
¿Está escrito un evento OnClose?, si es así, ¿Que hace?.
¿Has hecho un debug paso a paso de la dll?.
¿Usas el formulario en un thread a parte?.

Saludos.

Gercondi
12-10-2011, 19:09:49
Gracias por sus comentarios.
Pude solucionar el inconveniente colocando un timer que cada segundo se encarga de la conversion de unos datos luego de ser capturado por el lector.