Delphi - carga dinamica de dllform

 
Vista:

carga dinamica de dllform

Publicado por pabloloustau (25 intervenciones) el 10/03/2010 18:18:12
hola a todos!
quiero hacer una aplicacion que por medio de un combobox pueda añadir el nombre de librerias y ejecutarlas en el programa.
las librerias son dllform y he intentado hacer algo como esto sin exito:

type
tproc= procedure;
var
handle:thandle;
dllname:string;
proc:tproc;
begin
dllname:= combobox1.Text;
handle:= loadlibrary(pchar(dllname));
proc:= getprocaddress(handle, pchar(ShowDllFormModal));
end;

se que faltan las ecepciones y liberarla de memoria pero el codigo no me funciona a pesar que tengo las dll en la carpeta del ejecutable.
alguien me podria dar una mano por favor, que me re trabe con esto...gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:carga dinamica de dllform

Publicado por skull leader (80 intervenciones) el 10/03/2010 20:11:01
eso si esta hardcore.

aqui encontre un ejemplo de como se hace, trabajo con dlls pero esa parte no me toco hacerla, solo le doy mantenimiento a los que ya existen.

http://www.informit.com/articles/article.aspx?p=27837&seqNum=3

imagino que igual ya lo revisaste, pero a mi me parece bastante practico y claro y sobre todo, que se apega a lo que intentas hacer.

prueba y nos cuentas como te fue.

saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:carga dinamica de dllform

Publicado por pabloloustau (25 intervenciones) el 10/03/2010 21:07:44
encontre una solucion pero con algunos problemas a ver quien me puede ayudar??

type
TProc = procedure;
var
Proc: TProc;
Handle: THandle;
DllName: string;
ShowDllFormModal:string;
begin
DllName:= combobox1.Text;
ShowDllFormModal:= combobox2.Text;
Handle := LoadLibrary(PChar(DllName));
if Handle = 0 then
raise Exception.Create('DLL no encontrada: ' + DllName);
try
Proc := GetProcAddress(Handle, PChar(ShowDllFormModal));
if @Proc = nil then
raise Exception.Create('Función no encontrada: ' +
ShowDllFormModal);
Proc;
finally
FreeLibrary(Handle);
end;
end;

con este codigo puedo ejecutar un dll ingresando el nombre del dll y el nombre de la funcion en un combobox.
en mi caso ejecute un showdllformmodal el problema es que cuando cierro la aplicacion showmodal me salen dos errores:

1- access violation at address 00c8c1130 read of address 00c8c1130
2- el identificador de la ventana no es valido.

como hago para eliminar estos errores???
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar