Probablemente os acordais que el C con su estilo estandar de paso de parámetros cdecl, permite declarar y usar funciones con un número variable de parámetros. En principio en delphi esto nopuede ser... ¿o si?.
Existe una API de windows muy útil para tratar cadenas de caracteres, conversiones y formatos. Me refiero a wsprintf, Declarada como:
cpp
int __cdecl wsprintf( LPTSTR lpOut, LPCTSTR lpFmt, ... );
Pero esta función en delphi está declarada así:
delphi
wsprintf(Output, Format: PAssiChar);
Si tratamos de implementar algo como esto, nos da un error en el número de parámetros:
delphi
var Text: array [0..100] of char; begin wsprintf(Text,'Esto es %02d', $10); end;
La solución es redeclarar e importar la API desde wsprintfA, si no queremos Unicode:
delphi
function wsprintf(lpOut, lpFmt: PChar): Integer; cdecl; varargs; external 'User32.dll' name 'wsprintfA';
Ahora podemos usarla tal y como viene en la ayuda MSDN, y códigos como este compilan y funcionan perfectamente:
delphi
var Text: array [0..100] of char; begin wsprintf(Text,'Esto es en decimal %02d o hexadecimal %X', $10, 16); end;
Bien es verdad que los String de delphi nos permiten implementar códigos parecidos al anterior pero ¿Y si no interesa usar String? También nos permitirá traducir código de C con facilidad donde encontrareis el amplio uso de funciones de la familia printf, del estándar de C y con paso de número variable de parámetros.
Espero que os sea de utilidad.
Saludos.