Ver Mensaje Individual
  #4  
Antiguo 06-04-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Reputación: 28
Lepe Va por buen camino
Sobre:

type TTmp_Lib = function(s_Data:String):Pchar;stdcall;

En este caso vendrá de una Dll. Te muestro otro ejemplo más claro:
Código Delphi [-]
function  Suma(a,b: integer):integer;
function Resta(a,b: integer):integer;

type TOperaciones = function (ValorA, ValorB:integer):integer;


var LaOperacion :TOperaciones;
begin
  if combo1.itemindex = 1 then
    LaOperacion := suma
  else
   LaOperacion := Resta;

  c:= LaOperacion( x, y); // llamamos a la suma o a la resta.

Yo diría que es una herramienta más, sabiendo el prototipo (si es un procedimiento o una función además de número y tipos de parámetros de entrada y salida) puedes trabajar con dichas funciones sin saber lo que hacen internamente. Por ejemplo, tú haces un componente que tiene las dos operaciones anteriores (suma y resta), distribuyes la documentación y no distribuyes el código fuente. Con esas definiciones, cualquiera puede hacer una operación llamada Multiplicación.


En cuanto a estos señores:
Código Delphi [-]
 TEnumIniSectionProc = procedure(const Line: PChar; const Ext: Integer) of object;

 procedure EnumIniSection(const EnumProc: TEnumIniSectionProc;
Es lo que se denomina Callbacks, ¿funciones retroalimentadas?

Podríamos decir (en lenguaje sencillo) que es la implementación de los típicos eventos de delphi pero a nivel de API de Windows.

Usando ese ejemplo: Se supone que EnumIniSection leerá todas las secciones que tiene un archivo .ini, y por cada sección que encuentre, hace ejecutar el "EnumProc" que no es más que un método de un objeto:
Código Delphi [-]
type Tmio = Class(Tobject)
  public 
     constructor Create;
     procedure Informame(const Line: Pchar; const Ext: integer);
end;
... 

procedure Tmio.Informame(const Line: Pchar; const Ext: integer);
begin 
  ShowMessage(' sección ' + Line);
end;

constructor Tmio.Create;
begin 
  EnumIniSection(Informame);
end;

La API está plagada de callbacks, por ejemplo la clase TTimer, lo único que hace es encapsular en típicas clases de delphi, las llamadas a SetTimer que requiere de funciones retroalimentadas.

Por si no ha quedado claro: No hay implementación de esas funciones, porque quien lo implementa eres tú, como usuario del módulo o componente. El que hizo el módulo "EnumIniSection" te da la posiblidad de informarte cuando se lee una Sección y de que tú puedas ejecutar tu propio código.

Edito: creo que no me he expresado muy claramente que digamos.... pero a estas horas .... jeje, pregunta si eso...) Voy a por otro café a ver si me espabilo

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita