Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   sobrecargar funciones en DLL ? (https://www.clubdelphi.com/foros/showthread.php?t=13597)

vic_ia 24-08-2004 19:58:49

sobrecargar funciones en DLL ?
 
buen dia a todos los del foro...

he creado una DLL la cual exporta dos funciones, las cuales en general realizan el mismo tipo de calculo y regresan resultados similares, la diferencia basica de estas en el número y tipo de parametros que les paso; en un procedimiento dependiendo de una condición cargo una u otra, para esto tengo definidas dos variables funcion con el "prototipo" de cada una y cargo la requerida en la variable adecuada, todo funciona muy bien; mi pregunta es : asi como cuando dentro de una unidad se puede sobrecargar una función y el compilador llama a la función que corresponda de acuerdo al numero y tipo de parametros con que se llama la función, ¿hay alguna forma de hacerlo con las funciones que menciono, y no tener dos variables diferentes para los tipos ?

de antemano gracias....

saludos....

roman 24-08-2004 20:21:37

Pues no sé, ¿por qué no lo intentas? Si ha de funcionar se me ocurriría algo como:

Código Delphi [-]
function MiFuncion(parámetros): Integer; external 'midll.dll'; name 'MiFuncion1'; overload; 
function MiFuncion(otros parámetros): Integer; external 'midll.dll'; name 'MiFuncion2'; overload;

// Saludos

roman 24-08-2004 20:37:14

Ya te tengo un ejemplo ;)

En el dll:

Código Delphi [-]
function Suma(A, B: Integer): Integer; overload;
begin
  Result := A + B;
end;

function Suma(A, B, C: Integer): Integer; overload;
begin
  Result := A + B + C;
end;

exports
  // debes especificar los parámetros cuando exportas rutinas sobrecargadas
  Suma(A, B: Integer) name 'Suma1',
  Suma(A, B, C: Integer) name 'Suma2';

En la unidad que use la dll:

Código Delphi [-]
function Suma(A, B: Integer): Integer; external 'midll.dll' name 'Suma1'; overload;
function Suma(A, B, C: Integer): Integer; external 'midll.dll' name 'Suma2'; overload;

Intenté exportar las funciones sin cambiarles de nombre pero aunque compilaba bien los resultados no eran los esperados (la primera función devolvía basura).

Pero de esta forma puedes usar las rutinas sobrecargadas tanto en la misma dll como fuera de ella usando el mismo nombre.

// Saludos

vic_ia 24-08-2004 21:55:33

hola roman....

muchas gracias.... lo probare.....

saludos....


La franja horaria es GMT +2. Ahora son las 05:42:05.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi