Página 1 de 1
Una ayudita con C
Publicado: Lun Nov 22, 2004 8:40 pm
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
Una ayudita con C
Publicado: Mar Nov 23, 2004 11:03 am
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
Una ayudita con C
Publicado: Mar Nov 23, 2004 11:58 am
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
>
>
Una ayudita con C
Publicado: Mar Nov 23, 2004 1:25 pm
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
Una ayudita con C
Publicado: Mar Nov 23, 2004 5:40 pm
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