Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Usar una Funcion de una Dll dentro de la Propia Dll (https://www.clubdelphi.com/foros/showthread.php?t=82927)

elcharlie 25-04-2013 13:57:44

Usar una Funcion de una Dll dentro de la Propia Dll
 
Buenas:
Como veis soy novatillo en esto de Delphi, y me he encontrado con un problema. La cuestion es que estoy desarrollando una dll, con unas funciones, que reutilizare en otro programa.Hasta ahi todo correcto, el problema es que necesito algunas funciones para reutilizarlas en el propio codigo de la dll, y delphi no me deja o yo no se como hacerlo.
Alguna Idea?
Gracias de Antemano.
Os pongo un ejemplo para verlo, por si no me he explicado bien:
Código Delphi [-]
library OrtoisDll;



uses
  System.SysUtils,
  Vcl.Forms,
  System.Classes;

function StringToPAnsiChar(stringVar : string) : PAnsiChar;
Var
  AnsString : AnsiString;
begin
    if stringVar <> '' Then
    begin
       AnsString := AnsiString(StringVar);
       Result := PAnsiChar(PAnsiString(AnsString));
   end; 
end;

function RetornoVer():PAnsiChar;stdcall;
begin
   Result:= //Aqui es donde quiero llamar a la funcion StringToPAnsiChar
end;

exports RetornoVer;

begin
end.

WkaymQ48 25-04-2013 19:57:36

:confused: No debería de haber ningún problema por usar funciones dentro de una dll.

Lo que si es mala idea es devolver un puntero (PAnsiChar) a un string que no existe fuera de la función. Es decir una vez finalizada la función StringToPAnsiChar el puntero que devuelve apunta a una dirección de memoria indeterminada, no a la cadena de texto que le pasas como parámetro a la función.

Para que te hagas una idea de lo que pasa al llamar a la funcion StringToPAnsiChar
  • Llamas a la función pasandole una cadena como parámetro
  • Dentro de la función se reserva memoria para guardar ese texto
  • La función devuelve un puntero a esa memoria
  • La función al terminar libera esa memoria que tenia reservada
  • Ahora el puntero apunta a una posición de memoria que no esta en uso


La franja horaria es GMT +2. Ahora son las 14:53:34.

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