Ver Mensaje Individual
  #10  
Antiguo 08-09-2015
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Reputación: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
En realidad C++ tiene también referencias pero no se usan para la VCL. De hecho, muchas "traducciones" de API de Windows cambia punteros a referencias delphi lo que en ocasiones es positivo pero no en otras. Entonces, intrínsecamente pasar una variable por valor es pasar un simple puntero, el resto es pura sintaxis.

Cuentas veces nos hemos encontrado con una API declarada así:
Código Delphi [-]
 function APIFunc(hHandle: THANDLE; ...; var dwValue: DWORD): integer;

cuando en versión original debería ser:
Código Delphi [-]
 function (hHandle: THANDLE; ...; dwValue: PDWORD): integer;

Si no queremos pasar dwValue, deberemos declararla y pasarla:
Código Delphi [-]
var
  dwValue: DWORD;
begin  
  APIFunc(Handle, ..., dwValue);
Engorroso si en realidad no vamos a usar, porque no nos interesa dwValue...

O bien pasar una referencia nula:
Código Delphi [-]
begin
  APIFunc(Handle, ..., PDWORD(0)^);
Esto último nos ahorra una variable inútil pero hace difícil leer el código para neófitos...

¿No sería más fácil usar esto?:
Código Delphi [-]
begin
  APIFunc(Handle, ..., nil);

Pues en C es más fácil, en este caso las referencias sobran.
Código:
APIFunc(Handle, ..., 0);

Mayor motivo para usar la API en C/C++


Saludos.
Responder Con Cita