In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Una ayudita con C

Foro público de Xailer en español
Responder
jmartial
Mensajes: 397
Registrado: Vie May 20, 2005 8:53 pm

Una ayudita con C

Mensaje por jmartial »

Hola,
He buscado una función que me devuelva el espacio en disco y T o F si no ha
habido error accediendo, en Xailer he añadido el siguiente código en C pero
en un disco de 3 1/2" siempre me devuelve estos 3 valores: 1238200 1238204 y
0
#pragma BEGINDUMP
#include <windows.h>
#include "hbapi.h"
HB_FUNC( GETDISKFREESPACE )
{
PULARGE_INTEGER nBytesFree =0; /*= (PULARGE_INTEGER)
hb_parni(2); */
PULARGE_INTEGER lpTotalNumberOfFreeBytes =0; /*= (PULARGE_INTEGER)
hb_parni(3);*/
PULARGE_INTEGER lpTotalNumberOfBytes =0; /*= (PULARGE_INTEGER)
hb_parni(4);*/
hb_retl( (BOOL) GetDiskFreeSpaceExA( (LPCTSTR) hb_parc(1), nBytesFree ,
lpTotalNumberOfBytes, lpTotalNumberOfFreeBytes ) ) ;
hb_stornl( (LONG) &nBytesFree , 2 );
hb_storni( (INT) &lpTotalNumberOfBytes , 3 );
hb_storni( (INT) &lpTotalNumberOfFreeBytes , 4 );
}
#pragma ENDDUMP
¿QUE ESTOY HACIENDO MAL???
Saludos,
Joaquín
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5706
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Una ayudita con C

Mensaje por jfgimenez »

Joaquín,
no lo he probado, pero inténtalo con esto:
#pragma BEGINDUMP
#include <windows.h>
#include <xailer.h>
XA_FUNC( GETDISKFREESPACE )
{
ULONGLONG nBytesFree =0;
ULONGLONG nTotalNumberOfFreeBytes =0;
ULONGLONG nTotalNumberOfBytes =0;
hb_retl( (BOOL) GetDiskFreeSpaceEx( (LPCTSTR) hb_parc(1),
(PULARGE_INTEGER) &nBytesFree ,
(PULARGE_INTEGER) &nTotalNumberOfBytes,
(PULARGE_INTEGER) &nTotalNumberOfFreeBytes ) ) ;
hb_stornll( nBytesFree , 2 );
hb_stornll( nTotalNumberOfBytes , 3 );
hb_stornll( nTotalNumberOfFreeBytes , 4 );
}
#pragma ENDDUMP
--
Un saludo,
José F. Giménez
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
jmartial
Mensajes: 397
Registrado: Vie May 20, 2005 8:53 pm

Una ayudita con C

Mensaje por jmartial »

Muchas Gracias Jose F.,
eres un hacha, lo dejé anoche por imposible y la única diferencia que tenía
con lo tuyo era el definir ULONGLONG al principio, pero no tengo ni idea por
qué lo has usado , en la api de win32 decía PULARGE_INTEGER.
Un Saludo,
Joaquín
"José F. Giménez" <jfgimenez@wanadoo.es> escribió en el mensaje
news:[email=41a30be4@ozsrv2.ozlan.local...]41a30be4@ozsrv2.ozlan.local...[/email]
> Joaquín,
>
> no lo he probado, pero inténtalo con esto:
>
> #pragma BEGINDUMP
>
> #include <windows.h>
> #include <xailer.h>
>
> XA_FUNC( GETDISKFREESPACE )
> {
> ULONGLONG nBytesFree =0;
> ULONGLONG nTotalNumberOfFreeBytes =0;
> ULONGLONG nTotalNumberOfBytes =0;
>
> hb_retl( (BOOL) GetDiskFreeSpaceEx( (LPCTSTR) hb_parc(1),
> (PULARGE_INTEGER) &nBytesFree ,
> (PULARGE_INTEGER) &nTotalNumberOfBytes,
> (PULARGE_INTEGER) &nTotalNumberOfFreeBytes ) ) ;
>
> hb_stornll( nBytesFree , 2 );
> hb_stornll( nTotalNumberOfBytes , 3 );
> hb_stornll( nTotalNumberOfFreeBytes , 4 );
> }
>
> #pragma ENDDUMP
>
>
> --
> Un saludo,
>
> José F. Giménez
>
>
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5706
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Una ayudita con C

Mensaje por jfgimenez »

Joaquín,
> eres un hacha, lo dejé anoche por imposible y la única diferencia que
> tenía
> con lo tuyo era el definir ULONGLONG al principio, pero no tengo ni idea
> por
> qué lo has usado , en la api de win32 decía PULARGE_INTEGER.
El tipo PULARGE_INTEGER está definido en windows para los compiladores de C
que no soporten un tipo nativo de 64 bits, pero BCC sí lo soporta, y es
LONGLONG o ULONGLONG.
Además, el problema que tenías estaba relacionado con los punteros. Tú
estabas definiendo las variables como PULARGE_INTEGER, y eso es un puntero.
Tenías que haberlas declarado como ULARGE_INTEGER y usar & para llamar a la
función.
Bueno, parece un poco lío, pero el caso es que si así te funciona, pues
estupendo. Y lo incluiremos directamente en Xailer ;-)
--
Un saludo,
José F. Giménez
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
jlalin
Mensajes: 926
Registrado: Sab Dic 25, 2010 11:10 pm

Una ayudita con C

Mensaje por jlalin »

Joaquí­n,
lo que estás intentando hacer está implementado en xHarbour de manera
nativa. Mira la función hb_diskSpace() en sourcertldisksphb.c
Saludos,
José Lalí­n
Responder