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
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.
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
Una ayudita con C
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
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
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
>
>
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
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
> 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
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
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