![]() |
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! |
No puedes usar un string en una DLL.
Caso Ampliación PD; cualquier funcion exportada en la DLL debe ser declarada con stdcall. Saludos |
Cita:
Saludos. |
Cita:
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 |
|
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! |
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; |
La franja horaria es GMT +2. Ahora son las 00:44:31. |
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