Creando Estructuras TypeDef Struct como en C

mterraz
Posts: 41
Joined: Mon Jun 10, 2013 1:21 pm

Creando Estructuras TypeDef Struct como en C

Post 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
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Creando Estructuras TypeDef Struct como en C

Post by Antonio Linares »

Mariano,

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

Antonio Linares
www.fivetechsoft.com
mterraz
Posts: 41
Joined: Mon Jun 10, 2013 1:21 pm

Re: Creando Estructuras TypeDef Struct como en C

Post 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
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Creando Estructuras TypeDef Struct como en C

Post by Antonio Linares »

Puedes directamente hacer:

nNumeroComprobante = oFiscal:AbrirDocumento(82)

MsgInfo( nNumeroComprobante )
regards, saludos

Antonio Linares
www.fivetechsoft.com
mterraz
Posts: 41
Joined: Mon Jun 10, 2013 1:21 pm

Re: Creando Estructuras TypeDef Struct como en C

Post 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
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Creando Estructuras TypeDef Struct como en C

Post by Antonio Linares »

Que versión de Harbour estás usando ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
mterraz
Posts: 41
Joined: Mon Jun 10, 2013 1:21 pm

Re: Creando Estructuras TypeDef Struct como en C

Post by mterraz »

Hola Antonio las versiones que estoy usando son :
Harbour: HB32
FW16.02
Borland BCC7

Saludos Mariano
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Creando Estructuras TypeDef Struct como en C

Post 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]
regards, saludos

Antonio Linares
www.fivetechsoft.com
mterraz
Posts: 41
Joined: Mon Jun 10, 2013 1:21 pm

Re: Creando Estructuras TypeDef Struct como en C

Post 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
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Creando Estructuras TypeDef Struct como en C

Post by Antonio Linares »

Prueba nuevamente usando este Harbour:

https://bitbucket.org/fivetech/harbour- ... 170325.zip
regards, saludos

Antonio Linares
www.fivetechsoft.com
mterraz
Posts: 41
Joined: Mon Jun 10, 2013 1:21 pm

Re: Creando Estructuras TypeDef Struct como en C

Post 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
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Creando Estructuras TypeDef Struct como en C

Post 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
regards, saludos

Antonio Linares
www.fivetechsoft.com
mterraz
Posts: 41
Joined: Mon Jun 10, 2013 1:21 pm

Re: Creando Estructuras TypeDef Struct como en C

Post 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
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Creando Estructuras TypeDef Struct como en C

Post 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
regards, saludos

Antonio Linares
www.fivetechsoft.com
mterraz
Posts: 41
Joined: Mon Jun 10, 2013 1:21 pm

Re: Creando Estructuras TypeDef Struct como en C

Post 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
Post Reply