Page 1 of 2

Funciones C en Harbour

Posted: Mon Feb 08, 2021 1:58 pm
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

Re: Funciones C en Harbour

Posted: Mon Feb 08, 2021 4:15 pm
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

Re: Funciones C en Harbour

Posted: Mon Feb 08, 2021 4:21 pm
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

Re: Funciones C en Harbour

Posted: Mon Feb 08, 2021 9:06 pm
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.

Re: Funciones C en Harbour

Posted: Wed Feb 10, 2021 12:05 am
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 ) ) );
}
 

Re: Funciones C en Harbour

Posted: Wed Feb 10, 2021 9:24 am
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 :-)

Re: Funciones C en Harbour

Posted: Wed Feb 10, 2021 6:34 pm
by mgsoft
Hola Manuel,

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

Gracias.

Re: Funciones C en Harbour

Posted: Wed Feb 10, 2021 11:56 pm
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:

Re: Funciones C en Harbour

Posted: Thu Feb 11, 2021 6:49 am
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

Re: Funciones C en Harbour

Posted: Thu Feb 11, 2021 2:16 pm
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 ) );
}

Re: Funciones C en Harbour

Posted: Thu Feb 11, 2021 3:10 pm
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.

Re: Funciones C en Harbour

Posted: Thu Feb 11, 2021 3:26 pm
by AngelSalom
Interesante lo del curso ... cojo sitio :D

Re: Funciones C en Harbour

Posted: Fri Feb 12, 2021 8:44 am
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,

Re: Funciones C en Harbour

Posted: Fri Feb 12, 2021 12:19 pm
by csincuir
Pues otro mas, me apunto para estar al fondo de la clase también.
Gracias Manu

Saludos

Carlos

Re: Funciones C en Harbour

Posted: Fri Feb 12, 2021 1:09 pm
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