carga dinamica de un dllform
hola a todos!
quiero hacer una aplicacion que por medio de un combobox u open file 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.:) |
Así, para empezar, no nos has dicho qué falla. Es decir, no es lo mismo que muestre un error de que no encuentra tal archivo que una violación de segmento o una corrupción de memoria. Mejor que copies el error y lo pongas aquí.
|
si tenes razon, disculpame.
no sale ningun error, directamente no pasa nada, no se ejecuta la dllform. |
perdon aca esta el error:
[DCC Error] Unit8.pas(37): E2003 Undeclared identifier: 'ShowDllFormModal' como declaro el export showdllformmodal?? |
le declare el ShowDllFormModal como string compilo bien pero cuando selecciono el dll en el combobox y clickeo no pasa nada, no tira ningun cartel de error pero tampoco se ejecuta el dllform
procedure TForm7.Button1Click(Sender: TObject); type tproc= procedure; var handle:thandle; dllname:string; ShowDllFormModal:string; proc:tproc; begin dllname:= combobox1.Text; handle:= loadlibrary(pchar(dllname)); proc:= getprocaddress(handle, pchar(ShowDllFormModal)); end; |
perdon por tantos mensajes pero ya tube una solucion aunque con algunos problemitas
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??? |
Veo que has estado trabajándotelo, eso está bien. :)
Cita:
|
La franja horaria es GMT +2. Ahora son las 07:25:54. |
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