Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-03-2008
robinsongm robinsongm is offline
Miembro
 
Registrado: sep 2004
Ubicación: Madrid, España
Posts: 25
Poder: 0
robinsongm Va por buen camino
Llamar funcion dll con una cadena...

Hola!.
Me he creado una DLL solo de funciones que devuelven strings.

y necesito una forma para poder acceder a dichas funciones si solo sé el nombre de la funcion en un string...
Me explico....

Estas son funciones ejemplo en la DLL:

Function hola_mundo: String;
Begin
result:= '*** Hola mundo ***'
End;

Function SegundaFuncion: String;
Begin
result:= 'Esta es la segunda funcion'
End;

(NO se si debería poner: Function.... :String; stdcall; ¿?)

Tengo una lista de "IDs" en string dentro de mi aplicación y cada uno es el nombre de una función, Los nombres son activamente variables claro que dentro de todos los que ya existen en la DLL.
No sé que id me enviarán, es dinamico y por tanto no puedo hacer la llamada con extern y así. Pues tendria que crearme un metodo
para cada funcion de la DLL y son cientos.... ademas que luego debería comprobar ID por ID para saber que funcion llamar....

Conociendo los IDs, desde la aplicacion he hecho (mas o menos y no estoy muy seguro de si es la forma correcta):

Funcion LeerCadena (IdCadena: String): String;
P: function: String; stdcall;
Begin
P:= GetProcAddress(HandleMiDLL,PCHar(IdCadena));
result:= P;
End;


Haciendo la llamada a LeerCadena('hola_mundo'); la misma debería responderme con: '*** Hola Mundo ***';

El Handle de mi dll lo obtengo con LoadLibrary(PathMIDLL) en procedimientos anteriores...

No se si me doy a entender bien, espero que si y que me puedan dar una manito. jajaja.

Muchas gracias majos!
__________________
Ni la utilidad del mentir es sólida, ni el mar de la verdad perjudica mucho tiempo.
Responder Con Cita
  #2  
Antiguo 28-03-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
No puedes usar un string en una DLL.

Caso
Ampliación

PD; cualquier funcion exportada en la DLL debe ser declarada con stdcall.

Saludos
Responder Con Cita
  #3  
Antiguo 28-03-2008
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Cita:
Empezado por cHackAll Ver Mensaje
No puedes usar un string en una DLL.

Caso
Ampliación

PD; cualquier funcion exportada en la DLL debe ser declarada con stdcall.

Saludos
No es que no se pueda, sino que simplemente, no deberías. En mi caso personal prefiero utilizar OleVariant en vez de String, o también puedes utilizar PAnsiChar.

Saludos.
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #4  
Antiguo 28-03-2008
keyboy keyboy is offline
Miembro
 
Registrado: oct 2004
Posts: 367
Poder: 20
keyboy Va por buen camino
Cita:
Empezado por D&W Ver Mensaje
No es que no se pueda, sino que simplemente, no deberías.
Pues, ¿cuál es la diferencia? Cualquier acceso a una función que use string causará un error. Yo entonces lo interpreto como no se debe porque no se puede

Y bueno, también se puede recurrir ShareMem para poder usar el tipo string, auqnue eso obliga a redistribuir la librería borlndmm.dll.

Bye
Responder Con Cita
  #5  
Antiguo 28-03-2008
JOSEPE JOSEPE is offline
Miembro
 
Registrado: feb 2005
Posts: 45
Poder: 0
JOSEPE Va por buen camino
No necesariamente si se hace uso de FastMM.
Saludos,
JOSEPE
Responder Con Cita
  #6  
Antiguo 01-04-2008
robinsongm robinsongm is offline
Miembro
 
Registrado: sep 2004
Ubicación: Madrid, España
Posts: 25
Poder: 0
robinsongm Va por buen camino
hey...muchas gracias a todos por los comentarios!...

Da igual como declare los tipos en la dll, pero me interesa que en delphi sean Strings, pues son mensajes a mostrar a los usuarios...

Muchas gracias de nuevo!
__________________
Ni la utilidad del mentir es sólida, ni el mar de la verdad perjudica mucho tiempo.
Responder Con Cita
  #7  
Antiguo 26-02-2010
drkirocorp drkirocorp is offline
Registrado
 
Registrado: abr 2008
Posts: 8
Poder: 0
drkirocorp Va por buen camino
String y PChar en DLL y Delphi

Hola, aunque el hilo ya es viejo, algunos colegas lo ven por primera vez o por centésima vez jeje, encontré este ejemplo en donde se puede obtener un string desde la dll sin tener errores extraños, por si le sirve a alguien, saludos

///En la DLL---------------------------

library MyDLL;
uses
SysUtils;

const
AString: string = 'Hello world!';

function ReturnsAString: PChar;
begin
GetMem( Result, length( AString ) +1 );
StrPCopy( Result, AString )
end;

procedure FreeString( s: PChar );
begin
FreeMem( s )
end;

exports
ReturnsAString,
FreeString;

begin
end.

//En Delphi--------------------------------

procedure Button1Click( Sender: Object ); // or whatever
var
s: string;
p: PChar;
begin
p := ReturnsAString; // get the DLL's memory
s := p; // get a copy into our string
FreeString( p ); // return the DLL's memory
ShowMessage( s )
end;
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Funcion para borrar la cadena que aparesca repetida dentro de otra cadena flystar Varios 1 02-07-2007 23:51:10
Funcion para buscar cadena dentro de otra cadena y el numero de veces flystar Varios 3 02-07-2007 22:48:08
Llamar de una función a otra jorgegetafe Varios 6 05-06-2007 15:53:19
¿Como llamar una funcion de una DLL? paty_rlopez Varios 3 26-06-2006 15:25:25
problema al llamar una función sgarrido Varios 3 27-07-2004 01:14:33


La franja horaria es GMT +2. Ahora son las 15:10:33.


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
Copyright 1996-2007 Club Delphi