FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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. |
#2
|
||||
|
||||
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í.
|
#3
|
|||
|
|||
si tenes razon, disculpame.
no sale ningun error, directamente no pasa nada, no se ejecuta la dllform. |
#4
|
|||
|
|||
perdon aca esta el error:
[DCC Error] Unit8.pas(37): E2003 Undeclared identifier: 'ShowDllFormModal' como declaro el export showdllformmodal?? |
#5
|
|||
|
|||
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; |
#6
|
|||
|
|||
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??? |
#7
|
||||
|
||||
Veo que has estado trabajándotelo, eso está bien.
Cita:
|
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Carga dinamica de una dll y Access violation | zurech | OOP | 3 | 21-02-2011 12:33:14 |
Carga del servidor | CoCaInE | SQL | 3 | 29-11-2007 13:17:40 |
carga dinámica de una libreria en linux | Robert01 | Lazarus, FreePascal, Kylix, etc. | 2 | 06-10-2007 19:43:15 |
Carga de Delphi | senpiterno | Varios | 1 | 21-09-2004 17:45:12 |
Carga rápida de jpg | xflo | Gráficos | 0 | 28-07-2004 10:38:38 |
|