Gracias Rapinto el ejemplo que yo pase y que estoy trabajando esta en vb6 y funciona bien
Versión para Imprimir
Gracias Rapinto el ejemplo que yo pase y que estoy trabajando esta en vb6 y funciona bien
@Rapinto, la tecnología .NET comparte ciertas características con ActiveX, como declaración del contenido de la DLL en el registro de Windows. Pero sigue siendo otra tecnología y no es compartible con ActiveX. Así que en este caso si se hubiera tratado de una biblioteca .NET sería imposible registrarla en PowerCOBOL. Además, estamos hablando de una OCX, esta extensión que yo sepa es exclusiva para ActiveX y nunca se usa en .NET.
@fastpho, me sigue pareciendo un sin sentido lo que está pasando... No me entra en la cabeza de dónde y cómo salen los nulos.
Intenta lo siguiente:
COBOL Código:
WORKING-STORAGE SECTION. 01 sCmd PIC X(250). 01 sCmdExt PIC X(250). PROCEDURE DIVISION. MOVE X'0802' TO sCmd (1:2) MOVE X'0C21' TO sCmdExt(1:2) MOVE SPACES TO sCmd (3:) sCmdExt(3:)
Si no te da buen resultado, también añade un nulo al final del campo, o sea:
COBOL Código:
WORKING-STORAGE SECTION. 01 sCmd PIC X(250). 01 sCmdExt PIC X(250). PROCEDURE DIVISION. MOVE X'0802' TO sCmd (1:2) MOVE X'0C21' TO sCmdExt(1:2) MOVE SPACES TO sCmd (3:) sCmdExt(3:) MOVE X'00' TO sCmd (250:1) sCmdExt(250:1)
Gracias Kuk voy a probar , de todas maneras estoy buscando alguna libreria de kernel32 o de user32 para ver si puedo eliminar el null terminated del string
Con este codigo me manda esto al puerto lo muestro un print screenCOBOL Código:
WORKING-STORAGE SECTION. 01 ReturnDEValue PIC S9(9) COMP-5 VALUE 0. 01 sCmd PIC X(250). 01 sCmdExt PIC X(250). PROCEDURE DIVISION. MOVE X'0802' TO sCmd (1:2). MOVE X'0C21' TO sCmdExt(1:2). MOVE SPACES TO sCmd (3:) sCmdExt(3:). MOVE X'00' TO sCmd (250:1) sCmdExt(250:1) INVOKE EpsonFPHostControl1 "OpenPort" RETURNING ReturnDEValue. INVOKE EpsonFPHostControl1 "AddDataField" USING sCmd RETURNING ReturnDEValue. INVOKE EpsonFPHostControl1 "AddDataField" USING sCmdExt RETURNING ReturnDEValue. INVOKE EpsonFPHostControl1 "SendCommand" RETURNING ReturnDEValue. call "BUSY". INVOKE EpsonFPHostControl1 "ClosePort" RETURNING ReturnDEValue.
@fastpho, esto para mi quiere decir que es la OCX la que añade los nulos porque el valor X'20' es espacios.
no los x'20' los ´pone cuando envio estas lineasCOBOL Código:
MOVE X'00' TO sCmd (250:1) sCmdExt(250:1)
---------- Post añadido : 23:36 ---------- Post anterior : 23:31 ----------
Mira ese link kuk
IBM Knowledge Center
---------- Post añadido : 23:45 ---------- Post anterior : 23:36 ----------
IBM Knowledge Center
@fastpho, el formato Z"Mi texto terminado por nulo" no es soportado por Fujitsu. Es soportando por IBM (a partir de cierta versión) y por MicroFocus. Con lo cual no es el caso ;)
Yo lo que veo en el pantallazo es que hay espacios hasta el final del campo recibido por la OCX y no hay ni un sólo nulo. Pero sigue sin funcionarte, según entiendo... :tonto:
En el pantallazo que mande si te fijas bien antes del separador de campo 1c esta el 00 y vuelve a repetir con el scmdext
A ver, no sé si me estoy liando pero estoy mirando WRITTEN DATA COM1 y no veo ningún nulo. El READ DATA COM1 sí que los contiene pero según entiendo es la salida, o sea la respuesta del COM1 y no lo que se haya enviado a él. WRITTEN DATA COM1 es lo que se le ha enviado, y ahí no hay ningún nulo por medio, sólo los 2 que nosotros fijamos al final del campo en la posición 250.
Con esto quiero decir que seguramente se nos está escapando algo, y el problema no son los nulos.
hola Kuk voy a subir la imagen de nuevo y marque en rojo con circulo los x'00'
el write es lo que envia a la impresora
gracias
@fastpho, esos 2 nulos son los 2 que ponemos al final de cada campo:COBOL Código:
MOVE X'00' TO sCmd (250:1) sCmdExt(250:1)
Es decir, en total añadimos al supuesto "Stack" 2 campos de 250 bytes cada uno, al final de los cuales movemos un nulo.