Page 1 of 2

Creando Estructuras TypeDef Struct como en C

Posted: Thu Jun 22, 2017 4:03 pm
by mterraz
Estimados colegas,
Quería realizar la siguiente consulta a los miembros del foro, necesito crear la siguiente estructura de datos tal cual lo harian en C..

typedef struct tagRespuestaAbrirDocumento {
long NumeroComprobante;
} RespuestaAbrirDocumento;

Soy nuevo con el manejo y la creación de estructuras y no estoy entendiendo como usarlas correctamente, leí bastante información disponible del foro pero no logro la creación de la estructura y su utilización, cualquier ayuda/comentario sera bienvenida...

La idea es usar la estructura creada para recibir las respuesta a métodos de un OCX.

Muchas gracias
Saludos Cordiales Mariano

Re: Creando Estructuras TypeDef Struct como en C

Posted: Thu Jun 22, 2017 5:40 pm
by Antonio Linares
Mariano,

Copia aquí la descripción de ese método del OCX

Re: Creando Estructuras TypeDef Struct como en C

Posted: Fri Jun 23, 2017 12:53 pm
by mterraz
Estimado Antonio,
Estoy utilizando el OLE View para ver el contenido del OCX, esta es la información del método y la estructura que necesito usar,

INFORMACION DEL OCX - OLE View
----------------------------
HasarArgentina (Hasar Argentina)
-> dispinterface _ImpresoraFiscalIRG3561
-> Methods
-------> AbrirDocumento ------> [id(0x60030422)] RespuestaAbrirDocumento AbrirDocumento([in] TiposComprobante CodigoComprobante);
...
...
...
->typedef struct RespuestaAbrirDocumento -------> typedef [uuid(142CE193-45F9-4AE0-83B8-0174CB533ADC), version(1.0)]
struct tagRespuestaAbrirDocumento { [helpstring("NumeroComprobante")]
long NumeroComprobante;
} RespuestaAbrirDocumento;

...
...
FIN OCX

Esta es la descripción del metodo abrirdocumento que por lo que veo devuelve una estructura del tipo RespuestaAbrirDocumento que tiene un valar LONG con el numero del documento que fue abierto con el metodo abrirdocumento()

Ejemplo:
????? = oFiscal:AbrirDocumento(82)

Como obtener la respuesta?

Muchas gracias por tu tiempo Antonio, si necesitas algún otro dato no dudes en solicitarlo..
Saludos Cordiales Mariano

Re: Creando Estructuras TypeDef Struct como en C

Posted: Fri Jun 23, 2017 6:15 pm
by Antonio Linares
Puedes directamente hacer:

nNumeroComprobante = oFiscal:AbrirDocumento(82)

MsgInfo( nNumeroComprobante )

Re: Creando Estructuras TypeDef Struct como en C

Posted: Fri Jun 23, 2017 7:13 pm
by mterraz
Hola Antonio
El resultado de la ejecución es:
Information: NIL

Local nrespabrir
...
nrespabrir = ofiscal:abrirdocumento (82)
Msginfo (nrespabrir)

Saludos y gracias Mariano

Re: Creando Estructuras TypeDef Struct como en C

Posted: Sat Jun 24, 2017 3:30 am
by Antonio Linares
Que versión de Harbour estás usando ?

Re: Creando Estructuras TypeDef Struct como en C

Posted: Sat Jun 24, 2017 7:07 pm
by mterraz
Hola Antonio las versiones que estoy usando son :
Harbour: HB32
FW16.02
Borland BCC7

Saludos Mariano

Re: Creando Estructuras TypeDef Struct como en C

Posted: Sat Jun 24, 2017 9:54 pm
by Antonio Linares
Ejecuta harbour.exe y te aparece la versión:

c:\harbour\bin>harbour
Harbour 3.2.0dev (r1703231115)
Copyright (c) 1999-2016, http://harbour-project.org/

Syntax: harbour <file[s][.prg]|@file> [options]

Re: Creando Estructuras TypeDef Struct como en C

Posted: Sat Jun 24, 2017 11:45 pm
by mterraz
Disculpa Antonio la version de Harbour es:

Harbour 3.2.0dev (r1601050904)
Copyright (c) 1999-2015, http://harbour-project.org/

Gracias y saludos,
Mariano

Re: Creando Estructuras TypeDef Struct como en C

Posted: Sun Jun 25, 2017 2:24 am
by Antonio Linares
Prueba nuevamente usando este Harbour:

https://bitbucket.org/fivetech/harbour- ... 170325.zip

Re: Creando Estructuras TypeDef Struct como en C

Posted: Sun Jun 25, 2017 5:48 pm
by mterraz
Hola Antonio, hice la actualización de Harbour que me recomendaste (gracias), ahora tengo la versión:

C:\hb32\bin>harbour
Harbour 3.2.0dev (r1703231115)
Copyright (c) 1999-2016, http://harbour-project.org/

Luego de hacer la siguiente prueba sigo obteniendo NIL como resultado al Msginfo de la respuesta al metodo abrirdocumento.
respabrir = oFiscal:AbrirDocumento(82)
msginfo(respabrir)

Aqui dejo un link a la pagina de descarga del Proveedor Hasar del OCX
En herramientas esta el OCX por si es de alguna utilidad:

http://grupohasar.com/index.php/product/smhpt-1000-f/

Muchas gracias, quedo atento a cualquier comentario y disponible para realizar pruebas.

Saludos Mariano

Re: Creando Estructuras TypeDef Struct como en C

Posted: Mon Jun 26, 2017 6:34 am
by Antonio Linares
Mariano,

Si sigue devolviendo nil entonces es que el soporte de OLE de Harbour no está funcionando bien para ese método,
ó hay algún error en tu código, pero no lo parece.

Puedes reportarlo en la lista de soporte técnico de Harbour:
https://groups.google.com/forum/#!forum/harbour-users

Re: Creando Estructuras TypeDef Struct como en C

Posted: Mon Jun 26, 2017 1:18 pm
by mterraz
Buen dia Antonio,
He creado el siguiente tópico en el grupo de Harbour junto con la información y las pruebas que tengo hasta ahora.

https://groups.google.com/forum/#!topic ... Wed7dLOCzE

Saludos y muchas gracias Mariano

Re: Creando Estructuras TypeDef Struct como en C

Posted: Wed Jun 28, 2017 5:07 am
by Antonio Linares
Mariano,

Se han implementado una serie de cambios en el soporte de OLE en Harbour

Seria conveniente construir el Harbour más reciente y probar nuevamente tu código

Re: Creando Estructuras TypeDef Struct como en C

Posted: Wed Jun 28, 2017 1:13 pm
by mterraz
Buen dia Antonio,

Estoy usando Harbour version,
Harbour 3.2.0dev (r1703231115)
Copyright (c) 1999-2016, http://harbour-project.org/

Tengo actualizadas las librerías y el compilador, necesitaría actualizar algo mas?

Me gustaría consultarte por este método en el OCX, que solicita una estructura como parámetro y todavia no he logrado hacer funcionar, "argument error".

#include "FiveWin.ch"
#include "Struct.ch"
#include "exstruc.ch"

FUNCTION Main()

Local AtributosDeTexto

STRUCT AtributosDeTexto
MEMBER Centrado AS BOOL INIT .F.
MEMBER DobleAncho AS BOOL INIT .F.
MEMBER BorradoTexto AS BOOL INIT .F.
MEMBER Negrita AS BOOL INIT .T.
ENDSTRUCT

oFiscal:ImprimirTextoFiscal( AtributosDeTexto, "HOLA" ) ----> Argument error

RETU .T.

Descripcion de la funcion en el OCX

void ImprimirTextoFiscal(
[in, out] AtributosDeTexto* Atributos,
[in] BSTR Texto,
[in, optional, defaultvalue(48)] ModosDeDisplay ModoDisplay);

************************************************************************************************************************************************************

Una alternativa que estoy considerando es la de,
Tendria que usar directamente la estructura en C?

#pragma BEGINDUMP

#include <hbapi.h>
#include <windows.h>

HB_FUNC( TEST )
{
Atributosdetexto oestilo;

oestilo.Centrado:=.t..
oestilo.DobleAncho:=.F.
oestilo.BorradoTexto:=.F.
oestilo.Negrita:=.T.

// & para acceder a la direccion de la estructura
// lo que vayas a hacer con ella
}
#pragma ENDDUMP

Muchas gracias,
Saludos Mariano