Funciones C en Harbour

Funciones C en Harbour

Postby jvtecheto » Mon Feb 08, 2021 1:58 pm

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  Expand view  RUN

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 24.07 64 bits + Harbour 64 bits 3.2dev(r2407221137) + MSVC64
User avatar
jvtecheto
 
Posts: 600
Joined: Mon Mar 04, 2013 4:32 pm
Location: Spain

Re: Funciones C en Harbour

Postby Enrico Maria Giordano » Mon Feb 08, 2021 4:15 pm

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
User avatar
Enrico Maria Giordano
 
Posts: 8718
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia

Re: Funciones C en Harbour

Postby George » Mon Feb 08, 2021 4:21 pm

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
George
 
Posts: 725
Joined: Tue Oct 18, 2005 6:49 pm

Re: Funciones C en Harbour

Postby carlos vargas » Mon Feb 08, 2021 9:06 pm

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  Expand view  RUN

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)
User avatar
carlos vargas
 
Posts: 1721
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: Funciones C en Harbour

Postby xmanuel » Wed Feb 10, 2021 12:05 am

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  Expand view  RUN


HB_FUNC( ANIMOPEN ) // ( hWnd, cAviFileRes ) --> lResult
{
      hb_retl( Animate_Open( ( HWND ) hb_parptr( 1 ), hb_parc( 2 ) ) );
}
 
______________________________________________________________________________
Sevilla - Andalucía
xmanuel
 
Posts: 762
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla

Re: Funciones C en Harbour

Postby Antonio Linares » Wed Feb 10, 2021 9:24 am

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

Re: Funciones C en Harbour

Postby mgsoft » Wed Feb 10, 2021 6:34 pm

Hola Manuel,

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

Gracias.
Saludos,

Eduardo
User avatar
mgsoft
 
Posts: 422
Joined: Mon Aug 17, 2009 12:18 pm
Location: España

Re: Funciones C en Harbour

Postby xmanuel » Wed Feb 10, 2021 11:56 pm

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
xmanuel
 
Posts: 762
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla

Re: Funciones C en Harbour

Postby Victor Casajuana Mas » Thu Feb 11, 2021 6:49 am

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
Victor Casajuana Mas
 
Posts: 11
Joined: Thu Jun 06, 2019 1:15 pm

Re: Funciones C en Harbour

Postby xmanuel » Thu Feb 11, 2021 2:16 pm

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  Expand view  RUN

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  Expand view  RUN

HB_FUNC( ANIMOPEN ) // ( hWnd, cAviFileRes ) --> none
{
      Animate_Open( ( HWND ) hb_parptr( 1 ), hb_parc( 2 ) );
}
______________________________________________________________________________
Sevilla - Andalucía
xmanuel
 
Posts: 762
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla

Re: Funciones C en Harbour

Postby jvtecheto » Thu Feb 11, 2021 3:10 pm

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 24.07 64 bits + Harbour 64 bits 3.2dev(r2407221137) + MSVC64
User avatar
jvtecheto
 
Posts: 600
Joined: Mon Mar 04, 2013 4:32 pm
Location: Spain

Re: Funciones C en Harbour

Postby AngelSalom » Thu Feb 11, 2021 3:26 pm

Interesante lo del curso ... cojo sitio :D
Angel Salom
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
User avatar
AngelSalom
 
Posts: 727
Joined: Fri Oct 07, 2005 7:38 am
Location: Benicarló (Castellón ) - España

Re: Funciones C en Harbour

Postby Baxajaun » Fri Feb 12, 2021 8:44 am

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,
User avatar
Baxajaun
 
Posts: 968
Joined: Wed Oct 19, 2005 2:17 pm
Location: Gatika. Bizkaia

Re: Funciones C en Harbour

Postby csincuir » Fri Feb 12, 2021 12:19 pm

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

Saludos

Carlos
csincuir
 
Posts: 408
Joined: Sat Feb 03, 2007 6:36 am
Location: Guatemala

Re: Funciones C en Harbour

Postby jvtecheto » Fri Feb 12, 2021 1:09 pm

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 24.07 64 bits + Harbour 64 bits 3.2dev(r2407221137) + MSVC64
User avatar
jvtecheto
 
Posts: 600
Joined: Mon Mar 04, 2013 4:32 pm
Location: Spain

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 51 guests