Funciones C en Harbour

User avatar
jvtecheto
Posts: 357
Joined: Mon Mar 04, 2013 4:32 pm
Location: Spain

Funciones C en Harbour

Post by jvtecheto »

Hola

Perdonad mi desconocimiento.
Pero estoy viendo codigo fuente de funciones de Fivewin, y veo que muchas de ellas estan hechas en lenguaje C,
la verdad no soy un experto en C, pero como creo que casi todos, se un poquito , pero no entiendo el formato de dichas funciones.
Ejemplo.

Code: Select all

HB_FUNC( ANIMOPEN ) // ( hWnd, cAviFileRes ) --> lResult
{
   #ifndef _WIN64
      hb_retl( Animate_Open( ( HWND ) hb_parnl( 1 ), hb_parc( 2 ) ) );
   #else
      hb_retl( Animate_Open( ( HWND ) hb_parnll( 1 ), hb_parc( 2 ) ) );
   #endif
}
 
Esta funcion veo que en los comentarios explica que recibe 2 parametros, pero.. Dudas.

1.- ¿porque hace #ifndef_WIN64 si luego el else es la misma sentencia, identica.?
2.- hb_retl es una funciona Harbour que recibe como parametro un entero y devuelve un entero (creo) entonces como se le pase como
parametro Animate_Open que devuelve void.) ¿?

Gracias por vuestra inestimable ayuda.

Saludos.

Jose
Fwh 19.06 32 bits + Harbour 3.2dev(r2011030937)+ Borland 7.4 + FivEdit
User avatar
Enrico Maria Giordano
Posts: 7355
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia
Contact:

Re: Funciones C en Harbour

Post by Enrico Maria Giordano »

jvtecheto wrote:1.- ¿porque hace #ifndef_WIN64 si luego el else es la misma sentencia, identica.?
La sentencia no es identica: hb_parnl / hb_parnll
jvtecheto wrote:2.- hb_retl es una funciona Harbour que recibe como parametro un entero y devuelve un entero (creo)
No, devuelve un logico.
jvtecheto wrote:entonces como se le pase como parametro Animate_Open que devuelve void.) ¿?
Si Animate_Open devuelve void, esto es un error.

EMG
George
Posts: 710
Joined: Tue Oct 18, 2005 6:49 pm

Re: Funciones C en Harbour

Post by George »

Hola Jose,
En el ejemplo que presenta puedes ver que las sentencias no son identicas. Fijate que la primera tiene hb_parnl() y la segunda hb_parnll().
Con relacion al formato a usar lo puedes escribir dentro de cualquier archivo PRG.

Mira este ejemplo para crear una funcion denominada "C_2EXP()" con el proposito de elevar a un exponente n el numero 2 :

#pragma BEGINDUMP
#include <hbapi.h>
#include <math.h>

HB_FUNC( C_2EXP )
{
long long n, nResult;

n = hb_parnll(1);
nResult = pow(2,n);
hb_retnll(nResult);
}
#pragma ENDDUMP

Desde tu programa la llamaria asi:
n2 := C_2EXP(4)
? "n2", n2

Saludos,

George
User avatar
carlos vargas
Posts: 1421
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: Funciones C en Harbour

Post by carlos vargas »

Syntax
void Animate_Open( hwnd, szName);

Parameters
hwnd
Type: HWND
A handle to the animation control.

szName
Type: LPTSTR

A pointer to a buffer that contains the path of the AVI file or the name of an AVI resource. Alternatively, this parameter can consist of the AVI resource identifier in the LOWORD and zero in the HIWORD. To create this value, use the MAKEINTRESOURCE macro. The control loads an AVI resource from the module specified by the instance handle passed to the CreateWindow function, the Animate_Create macro, or the dialog box creation function that created the control. The AVI file or resource specified by lpszName must not contain audio.

If this parameter is NULL, the system closes the AVI file that was previously opened for the specified animation control, if any.
de lo poco que se.

Code: Select all

HB_FUNC( ANIMOPEN ) // ( hWnd, cAviFileRes ) --> lResult
{
   #ifndef _WIN64 //se resuelve en tipo de compilacion
      hb_retl( Animate_Open( ( HWND ) hb_parnl( 1 ), hb_parc( 2 ) ) ); //aca con hb_parnl( 1) recuperamos el 1er parametro de tipo numerico entero largo(32 bits o 4byte), con hb_parc(2) recuperamos el segundo parametro tipo cadena. 
   #else
      hb_retl( Animate_Open( ( HWND ) hb_parnll( 1 ), hb_parc( 2 ) ) ); //aca con hb_parnll( 1) recuperamos el 1er parametro de tipo numerico entero largo largo(64 bits o 8byte), con hb_parc(2) recuperamos el segundo parametro tipo cadena. 
   #endif
}
 
hb_parl returna un valor numerico 0 (el cual es falso) o diferente a cero (lo cual seria verdadero), para todo los efecto retorna un valor logico, de ahi la letra l de logico.
que es diferente de hb_parni el cual es un retorno de tipo entero y hb_retnl el cual retorna un valor entero largo.

( HWND ) hb_parnl( 1 )-> se hace una conversion a de un entero largo a un handle window.
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
xmanuel
Posts: 613
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla
Contact:

Re: Funciones C en Harbour

Post by xmanuel »

A tu pregunta de porque hace una comprobación en tiempo de compilación de dos sentencias que son idénticas, está claro que no lo son una tiene hb_panl() y la otra hb_panll()
La primera recibe un entero largo y la segunda para win64 un entero largo largo.
Si te das cuentas el primer parámetro realmente es un manejador de venta o lo que es lo mismo un puntero a la estructura interna de definición de una ventana.
Harbour tiene para eso una función de tipo hb_parxx() es la hb_parptr() que esta definida así:

extern HB_EXPORT void * hb_parptr( int iParam ); /* retrieve a parameter as a pointer */

Si se usa será el propio compilador el que determine la memoria que ocupa el puntero, aunque no podrás evitar hacer cast.
La función quedaría así directamente:

Code: Select all


HB_FUNC( ANIMOPEN ) // ( hWnd, cAviFileRes ) --> lResult
{
      hb_retl( Animate_Open( ( HWND ) hb_parptr( 1 ), hb_parc( 2 ) ) );
}
 
______________________________________________________________________________
Sevilla - Andalucía
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Funciones C en Harbour

Post by Antonio Linares »

La función hb_parptr() se implementó en Harbour con bastante posterioridad respecto a hb_parnl() y hb_parnll()
de ahi que usásemos la técnica de hb_parnl()/hb_parnll() en FWH en vez de hb_parptr() que basicamente lo que hace es lo mismo :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
mgsoft
Posts: 398
Joined: Mon Aug 17, 2009 12:18 pm
Location: España

Re: Funciones C en Harbour

Post by mgsoft »

Hola Manuel,

Al final, ¿ibas a organizar un curso de C y Harbour?

Gracias.
Saludos,

Eduardo
xmanuel
Posts: 613
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla
Contact:

Re: Funciones C en Harbour

Post by xmanuel »

Era mi idea...
Pero la cosa se enfrió por falta de cuorum.

Ahora estoy a tope con mi proyecto HDO que está hecha 100x100 en C.
Está basado en un método que permite crea clases de Harbour en C.

Pero bueno si la peña se anima no lo descarto. :oops:
______________________________________________________________________________
Sevilla - Andalucía
Victor Casajuana Mas
Posts: 3
Joined: Thu Jun 06, 2019 1:15 pm

Re: Funciones C en Harbour

Post by Victor Casajuana Mas »

xmanuel wrote:Era mi idea...
Pero la cosa se enfrió por falta de cuorum.

Ahora estoy a tope con mi proyecto HDO que está hecha 100x100 en C.
Está basado en un método que permite crea clases de Harbour en C.

Pero bueno si la peña se anima no lo descarto. :oops:
+1

Enviado desde mi moto g(9) plus mediante Tapatalk
xmanuel
Posts: 613
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla
Contact:

Re: Funciones C en Harbour

Post by xmanuel »

Por cierto he estado mirando en Google y "Animate_Open" no devuelve nada por lo esta funcion en este momento esta mal diseññada.
No se si en algún momento si devolvia algo

Code: Select all

Animate_Open macro (commctrl.h)

Opens an AVI clip and displays its first frame in an animation control. You can use this macro or send the ACM_OPEN message explicitly.

Syntax
C++

Copy
void Animate_Open(
   hwnd,
   szName
);
Parameters
hwnd

Type: HWND

A handle to the animation control.

szName

Type: LPTSTR

A pointer to a buffer that contains the path of the AVI file or the name of an AVI resource. Alternatively, this parameter can consist of the AVI resource identifier in the LOWORD and zero in the HIWORD. To create this value, use the MAKEINTRESOURCE macro. The control loads an AVI resource from the module specified by the instance handle passed to the CreateWindow function, the Animate_Create macro, or the dialog box creation function that created the control. The AVI file or resource specified by lpszName must not contain audio.

If this parameter is NULL, the system closes the AVI file that was previously opened for the specified animation control, if any.

Return value
None
 
Si esta en FWH posiblemente Antonio lo deba cambiar a:

Code: Select all

HB_FUNC( ANIMOPEN ) // ( hWnd, cAviFileRes ) --> none
{
      Animate_Open( ( HWND ) hb_parptr( 1 ), hb_parc( 2 ) );
}
______________________________________________________________________________
Sevilla - Andalucía
User avatar
jvtecheto
Posts: 357
Joined: Mon Mar 04, 2013 4:32 pm
Location: Spain

Re: Funciones C en Harbour

Post by jvtecheto »

Muchisimas gracias a todos por contestar, es un honor para mi que gente tan importante
empleen parte de su valioso tiempo por una duda mia.

Manu lo del curso estoy interesado, eso si el ultimo de la fila :D , preparame las orejas.

Un abrazo a todos amigos.

Jose.
Fwh 19.06 32 bits + Harbour 3.2dev(r2011030937)+ Borland 7.4 + FivEdit
User avatar
AngelSalom
Posts: 664
Joined: Fri Oct 07, 2005 7:38 am
Location: Vinaros (Castellón ) - España
Contact:

Re: Funciones C en Harbour

Post by AngelSalom »

Interesante lo del curso ... cojo sitio :D
Angel Salom
http://www.visionwin.com
---------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.0
User avatar
Baxajaun
Posts: 853
Joined: Wed Oct 19, 2005 2:17 pm
Location: Gatika. Bizkaia

Re: Funciones C en Harbour

Post by Baxajaun »

Buenos días / Egun on !!!

Quedan plazas libres ;-) ? Me da igual, tener que estar al fondo de la clase que en el quicio de la puerta.

Muchas gracias.

Saludos,
csincuir
Posts: 305
Joined: Sat Feb 03, 2007 6:36 am
Location: Guatemala
Contact:

Re: Funciones C en Harbour

Post by csincuir »

Pues otro mas, me apunto para estar al fondo de la clase también.
Gracias Manu

Saludos

Carlos
User avatar
jvtecheto
Posts: 357
Joined: Mon Mar 04, 2013 4:32 pm
Location: Spain

Re: Funciones C en Harbour

Post by jvtecheto »

Hola

Bueno esto empieza a andar, sino ciento mal seríamos 6 por ahora, cuantos alumnos te hacen falta Manu?

Saludos

Jose.



Enviado desde mi POCOPHONE F1 mediante Tapatalk
Fwh 19.06 32 bits + Harbour 3.2dev(r2011030937)+ Borland 7.4 + FivEdit
Post Reply