Cobol Foro

Cobol Foro (https://www.cobolforo.es/index.php)
-   PowerCOBOL (ActiveX, v4 - v11) (https://www.cobolforo.es/forumdisplay.php?f=9)
-   -   [Sintaxis] Manejo OCX impresora Fiscal Epson nueva generación (https://www.cobolforo.es/showthread.php?t=601)

fastpho 26 de abril de 2017 22:34

La linea de los nulos las saque por no van e igual me estan apareciendo me tiene loco
Me baje de la pagina de Epson una dll y un .lib
Y viene una ocx tambien y tiene manual

La ocx cuando la quiero insertar me da un error
Voy a seguir probando

Kuk 26 de abril de 2017 23:11

fastpho, ¿qué error te da exactamente la OCX?

¿La DLL de qué va, qué hace exactamente, lo mismo que la OCX?

fastpho 27 de abril de 2017 14:34

1 Archivos Adjunto(s)
Este nuevo de paque de datos que baje viene con una com dice para windows y una dll y . lib para windows 32 y 64 bits cuando quise insertar el objecto no me figura en lo objetos insertables entonces me fui al boton browse y cuando la inserto me da el siguiente error : this is not a custom controls file Prove con vb6 y me hace lo mismo .
Bueno dije entonces voy por la dll pero no tengo el conocimiento para implementarla
No me deja subir el zip porque es muy pesado solo subo el pdf que explica

voy a dejar el link de epson para ver si la podes bajar KUK
Epson TM-T900FA | Impresoras fiscales | Punto de venta | Soporte | Epson Argentina

Kuk 27 de abril de 2017 15:40

fastpho, el uso de la DLL no es complicada. Debes añadir el archivo *.LIB a tu proyecto en PowerCOBOL. Luego copiar la DLL a la carpeta debug/release de tu proyecto PowerCOBOL donde te deja los EXE y DLL de tu proyecto.

En cuanto a la sintaxis. Te lo voy a explicar con ejemplos del PDF que has colgado.
Por ejemplo, dice que en la DLL hay una función (que por cierto no está disponible en la OCX) que es:

Código CPP:
  1. void setComPort( int Port )

Código:

This method configures the port number to be used. It is not available in the COM (.ocx) library.

Variable  Type      Value      Description
Port      int      Numeric    0 – USB
                              1 – COM1
                              2 – COM2
                              x - COMx

Void - quiere decir "nada", o sea que la función no devuelve resultado.

Para llamar esta función debes hacer:

Código COBOL:
  1.  WORKING-STORAGE SECTION.
  2.  01  sPort         PIC S9(9) COMP-5.
  3.  
  4.  PROCEDURE DIVISION.
  5.    
  6.     MOVE 0 TO sPort *> activamos USB
  7.    
  8.     CALL "setComPort" WITH STDCALL USING BY VALUE sPort

Este es un ejemplo básico. Ahora para llamar la función que llamábamos antes:

Código CPP:
  1. void AddDataField( char *in_buffer, int in_buffer_length )

Código:

This method adds a new field (binary data) for the next command.

Variable          Type      Value      Description
in_buffer        char      Binary    Max size buffer is 8192
in_buffer_length  int      Numeric    Max length is 8192

Para llamar esta función debes hacer:
Código COBOL:
  1.  WORKING-STORAGE SECTION.
  2.  01  InBuffer      PIC X(250).
  3.  01  BufferLen     PIC S9(9) COMP-5.
  4.  
  5.  PROCEDURE DIVISION.
  6.    
  7.     *> Prueba con cada una de estas combinaciones
  8.     MOVE X"08" & X"02" TO InBuffer
  9.     MOVE 2             TO BufferLen
  10.    
  11.     MOVE X"08" & X"02" & X"00" TO InBuffer
  12.     MOVE 2                     TO BufferLen
  13.    
  14.     MOVE X"08" & X"02" & X"00" TO InBuffer
  15.     MOVE 3                     TO BufferLen
  16.    
  17.     *> La propia llamada a la Función:
  18.     CALL "AddDataField" WITH STDCALL USING BY REFERENCE InBuffer
  19.                                            BY VALUE BufferLen

Siguiendo estos ejemplos puedes invocar cualquier función en la DLL.

fastpho 27 de abril de 2017 16:27

1 Archivos Adjunto(s)
gracias Kuk por tu tiempo voy a probar y lo que me sugieres y despues aviso como me fue

Código COBOL:
  1. WORKING-STORAGE SECTION.
  2.  01  sPort         PIC S9(9) COMP-5.
  3.  01  InBuffer      PIC X(250).
  4.  01  BufferLen     PIC S9(9) COMP-5.  
  5.  PROCEDURE       DIVISION.
  6.      MOVE 1 TO sPort *> activamos COM1
  7.    
  8.      CALL "setComPort" WITH STDCALL USING BY VALUE sPort
  9.  
  10.      *> Prueba con cada una de estas combinaciones
  11.      MOVE X"08" & X"02" TO InBuffer
  12.      MOVE 2             TO BufferLen
  13.    *> La propia llamada a la Función:
  14.      CALL "AddDataField" WITH STDCALL USING BY REFERENCE InBuffer
  15.                                            BY VALUE BufferLen
Inserte la libreria y copie la dll y el lib en el directorio donde trabajo cuando compilo me tira esta cantidad de errores que estoy haciendo mal
voy a subir el printscreen de la compilacion

Kuk 27 de abril de 2017 17:04

fastpho, parece ser una LIB estática (y no una LIB de importación) la cual además tiene sus propias dependencias. Acerca de las LIB: [Noticia] Diferentes tipos de librerías *.LIB que existen - COBOL Foro

¿Has instalado el EpsonFiscalDriver_01.09.00.exe? Aunque no creo que esto ayude para hacer el LINK.

Mira, cambia el código según explico en este hilo y convierte las llamadas en dinámicas: [Aporte] CALL de cualquier DLL sin *.LIB ni "LoadLibrary" - COBOL Foro. Así no necesitas la LIB en el proyecto, las funciones serán localizadas vía WinAPI por el Run-Time de Fujitsu, así que no olvides de quitar la LIB del proyecto.

fastpho 28 de abril de 2017 15:51

Hola Kuk instale el paquete EpsonFiscalDriver_01.09.00.exe , quite la lib del proyecto pero cuando compilo me da el siguiente error :

Linking C:\epsontm\epsontm900.exe ...
APPEPSON.obj : error LNK2001: unresolved external symbol _FUNC@4
C:\epsontm\epsontm900.exe : fatal error LNK1120: 1 unresolved externals

** The build has failed **

este es el archivo que cree cobol85.cbr que contiene :

[APPEPSON.ENTRY]
setComPort=EpsonFiscalDriver.DLL
AddDataField=EpsonFiscalDriver.DLL

Código COBOL:
  1.  ENVIRONMENT     DIVISION.
  2.  DATA            DIVISION.
  3.  WORKING-STORAGE SECTION.
  4.  01  FUNC  PIC X(10).
  5.  01  sPort         PIC S9(9) COMP-5.
  6.  01  InBuffer      PIC X(250).
  7.  01  BufferLen     PIC S9(9) COMP-5.  
  8.  PROCEDURE       DIVISION.
  9.      MOVE "setComPort" TO FUNC.
  10.      MOVE 1 TO sPort *> activamos COM1
  11.    
  12.      CALL "FUNC" WITH  STDCALL   USING BY VALUE sPort
  13.    

Kuk 28 de abril de 2017 16:16

fastpho, estás haciendo llamada estática:

Código COBOL:
  1.      CALL "FUNC" WITH  STDCALL   USING BY VALUE sPort

Quítale las comillas al FUNC para que tire de la varibale WORKING y no lo tome por literal:

Código COBOL:
  1.  ENVIRONMENT     DIVISION.
  2.  DATA            DIVISION.
  3.  WORKING-STORAGE SECTION.
  4.  01  FUNC  PIC X(10). *>  nombre función <===[
  5.  01  sPort         PIC S9(9) COMP-5.
  6.  01  InBuffer      PIC X(250).
  7.  01  BufferLen     PIC S9(9) COMP-5.  
  8.  PROCEDURE       DIVISION.
  9.      MOVE "setComPort" TO FUNC. *>  nombre función <===[
  10.      MOVE 1 TO sPort *> activamos COM1
  11.    
  12.      CALL FUNC WITH  STDCALL USING BY VALUE sPort

fastpho 28 de abril de 2017 23:33

Al fin pude Imprimir un Informe X Gracias Kuk
Ahora a laburar cualquier cosa estare informando

fastpho 4 de mayo de 2017 23:59

Hola KUK tengo problemas con estos metodos que me devuelven ningun valor y me parece que el problema es que estan mal implementadas :
Por ejemplo el metodo
Código:

getPrinterStatus
Prototype:
int getPrinterStatus( void )
Inputs:
Nothing.
Outputs:
Nothing.
Returns:
Only the least significant 16 bits are valid.

yo llamandola asi
Código COBOL:
  1.      move "getPrinterStatus" TO FUNC.
  2.      CALL FUNC WITH  STDCALL  USING BY REFERENCE CODIGO-CmImpresor.          
  3.      MOVE CODIGO-CmImpresor TO "Text" OF CmImpresor.
Pero siempre me da zero cuando me deberia dar algun valor por ejemplo cuando se abre la tapa del impresor o falta papel
Desde ya muchas gracias


La franja horaria es GMT +2. Ahora son las 04:27.

Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.