Bingen,
> No habrá una explicación mas extendida de cada tipo de dato que alguien me
> pueda proporcionar??
Puedes usar, en principio, todos los tipos de datos de C, que se escriben
siempre en minúsculas. Por otro lado, C permite declarar tipos nuevos, de
ahí la gran cantidad de tipos adicionales, que se suelen escribir en
mayúsculas para no confundirlos con los tipos nativos de C. Ten en cuenta
que C es 'case sensitive'.
Pues bien, windows aporta un montón de tipos nuevos, que son los que vas a
encontrar en todos los prototipos de funciones del API. Por otro lado,
[x]Harbour también aporta otros tipos. En cualquier caso, la mayoría de esos
tipos son intercambiables entre sí, y el compilador ni siquiera te da un
warning por ser tipos compatibles. P.ej (en 32 bits, que es lo que nos atañe
actualmente):
unsigned char = UCHAR = BYTE -> número entero de 8 bits sin signo
short = SHORT = INT16 -> número entero de 16 bits con signo
unsigned short = WORD -> número entero de 16 bits sin signo
int = long = INT = INT32 -> número entero de 32 bits con signo
unsigned int = DWORD = ULONG -> número entero de 32 bits sin signo
char [] ~ char * = LPSTR ~ LPCSTR -> string o array de caracteres
> Estoy haciendo un Inline C como este y me da un error de tipos y no se
> cual es el que debo de aplicar.
>
> Type mismatch in parameter 'szText' (wanted 'const signed char *', got
> 'unsigned long')
Este mensaje de error lo que dice es que el parámetro szText tiene que ser
del tipo 'const char *' (o LPCSTR) y en realidad le estás pasando un
'unsigned long' (o ULONG, o DWORD).
Traduciendo... que la función hb_retc() necesita como parámetro una cadena,
pero la función GetLogicalDriveStrings() te devuelve un número.
> #pragma BEGINDUMP
> #include <windows.h>
> #include <xailer.h>
>
> XA_FUNC( GETLOGICALDRIVES )
> {
> SHORT nBufferLength = 255;
> CHAR cString[255] ;
>
> hb_retc( GetLogicalDriveStrings( nBufferLength , cString) );
> }
>
> #pragma ENDDUMP
Lo correcto sería:
XA_FUNC( GETLOGICALDRIVES )
{
DWORD nBufferLength = 255;
char cString[255] ;
if( GetLogicalDriveStrings( nBufferLength , cString) == 0 )
hb_retc( "" );
else
hb_retc( cString );
}
--
Un saludo,
José F. Giménez
http://www.xailer.com