Envío código que me solicitaste

Unit pru1;
interface
Uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls,PRINTERS;
TYPE
TPROCESO= FUNCTION(HANDLE:THANDLE;password,tit,INI:string;numcla:INTEGER):INTEGER;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
actual:string;
FPRINTER:TPRINTER;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
VAR
INSTANCIADLL:THANDLE;
CAPTURAR:TPROCESO;
PRES:BOOLEAN;
D:INTEGER;
begin
FORM1.HIDE;
PRES:=TRUE;
InstanciaDLL := LoadLibrary('formato.dll');
IF INSTANCIADLL=0 THEN
BEGIN
SHOWMESSAGE('NO SE HA ENCONTRADO FORMATO.DLL');PRES:=FALSE;
FORM1.SHOW;
END;
IF PRES=TRUE THEN
BEGIN
try
{ obtener la direccion del procedimiento/función }
@CAPTURAR := GetProcAddress(InstanciaDLL, 'documen');
D:=capturar(Application.Handle,'xxx','OOO',ACTUAL,20);
finally
{ liberar la DLL}
FreeLibrary(InstanciaDLL);
FORM1.SHOW;
end;
END;
end;
La dll formato.dll tiene su proceso principal llamado documen que crea una form, en esa form tiene un menu de acciones a realizar las cuales las selecciona el usuario, tiene aproximadamente 14 submenus, el que causa el error es cuando un proceso crea en runtime una tabla paradox y tiene un componente table y datasource, el proceso en sí trabaja perfectamente el problema es cuando se libera la dll y se ha utilizado ente proceso genera un error en iddbas32.dll como página no valida utilizo delphi 2 desktop espero me puedas ayudar gracias

1 Respuesta

Respuesta
1
Tu código esta bien, pero creo que donde tienes el problema es dentro de la Dll, es probable que los componentes que estas creando dentro del Dll no los estés liberando, se supone que cuando liberas el dll también se libera todo lo que creaste dentro, pero parece que no, así que procura liberar lo que creas dentro del dll

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas