Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

spyke00

Problema ao criar DLL's

Recommended Posts

Galera... estou com um problema nas DLL'SEu preciso passar via parâmetros um ClientDataSet... e a form tem que ser MDIChild...pois bem, eu tenho isso criado! mas quando eu vou fechar o programa, da um erro e trava o programa...alguem sabe como eu poderia fazer isso ?!desde já agradeçoum forte abraçoATTMauricio Barros Scotton

Compartilhar este post


Link para o post
Compartilhar em outros sites

assim ó:"Project C:\...\ProjectLoadDLL.exe faulted with message: 'acess violation at 0x0032c669?: write of address 0x00030f48'. Process..."isso é só quando fecha ele... já tentei tirar os links entre a DLL e o form quando fecha... mas não consegui nada... já se eu não linkar a dll com o projeto (no clientdataset), não da erro nenhumnão sei por que....mas valeu!um abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom amigo, estou tentando liberar no momento em que o formulário é fechado, mas até agora o que consegui foram erros diferentes...talvez alguem tenha algum exemplo... isso é difícil de se encontrar na internet...Desde já agradeço...ATTMauricio Barros Scotton

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou explicar a dll:

 

*Esta dll, tem que conter os formulários de consulta e alteração de uma tabela do banco de dados....

*Também deve ficar no formato: MDIChild, para que seja exibida no formulário principal...

*O DataSet do formulário desta DLL, tem que estar linkado com o do datamodule, que é filho do Aplicativo.

 

APLICATIVO - DATAMODULE <-Ligação-> DLL - DATASET - FORMULÁRIO DE CONSULTA

 

A DLL:

library DLL_CadForm;uses  SysUtils,  Classes,  Windows,  Forms,  dbclient,  dialogs,  Unit1 in 'Unit1.pas' {Form1};{$R *.res}var  DllApp, MainAPPs : TApplication;  CDSS: TclientDataSet;  Child : Tform1;  Started: boolean = false;  FormPointer : TForm;procedure MyDLLProc(Reason: Integer);begin  if Reason = DLL_PROCESS_DETACH then	{ DLL é descarregada. Restaura o apontador Application. }	if Assigned(DllApp) then begin	  //Child.DataSource1.DataSet:=nil;	  Application := DllApp;	endend;function MostrarJanelaFilha(MainApp : TApplication; CDS: TclientDataSet):Tform;begin  if not Assigned(DllApp) then begin	DllApp := Application;	Application := MainApp;  end; // Child := Tform1.Create(Application.MainForm);  application.createform(Tform1,form1);	  try	form1.DataSource1.DataSet:=CDS;	//Child.DataSource1.DataSet:=CDS{(MainAPPs.FindComponent('Form_load_DLL').FindComponent('ClientDataSet1') as TclientDataSet )};  except  end;  form1.Show;end;Exports  Form1,  MostrarJanelaFilha,  MyDLLProc;begin  {if (FormPointer = nil) and (Started = true) then begin	MyDLLProc(DLL_PROCESS_DETACH);	Started:=false;  end;	}end.//------------A unit Interna da DLL//------------unit Unit1;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls, Buttons, ExtCtrls, DB, Grids, DBGrids, dbclient;type  TForm1 = class(TForm)	Panel1: TPanel;	Bevel1: TBevel;	Bevel2: TBevel;	BitBtn1: TBitBtn;	DBGrid1: TDBGrid;	DataSource1: TDataSource;	Timer1: TTimer;	procedure BitBtn1Click(Sender: TObject);	procedure FormClose(Sender: TObject; var Action: TCloseAction);	procedure Timer1Timer(Sender: TObject);  private	{ Private declarations }  public	{ Public declarations }  end;var  Form1: TForm1;implementation{$R *.dfm}procedure TForm1.BitBtn1Click(Sender: TObject);begin  showmessage('asdasd');end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);begin  DataSource1.DataSet:=nil;  Form1:=nil;  action:=cafree;end;procedure TForm1.Timer1Timer(Sender: TObject);begin  caption:=application.Title+' - '+DataSource1.DataSet.Name;end;end.

A unit do loader da dll:

unit Unit_loadDLL;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls, DBClient, Provider, DB, SqlExpr;type  TForm_load_DLL = class(TForm)	Button1: TButton;	SQLConnection1: TSQLConnection;	SQLQuery1: TSQLQuery;	ClientDataSet1: TClientDataSet;	DataSetProvider1: TDataSetProvider;	Button2: TButton;	procedure Button1Click(Sender: TObject);  private  public	{ Public declarations }  end;var  Form_load_DLL: TForm_load_DLL;  a:Tform;implementation//------------------------------------------------------------------------------// funções das DLLS//------------------------------------------------------------------------------  function MostrarJanelaFilha(MainApp : TApplication; CDS: TclientDataSet):Tform;  external 'DLL_CadForm.dll';  procedure MyDLLProc(Reason: Integer); external 'DLL_CadForm.dll';//------------------------------------------------------------------------------{$R *.dfm}procedure TForm_load_DLL.Button1Click(Sender: TObject);begin  //a:=  MostrarJanelaFilha(application,ClientDataSet1); { with (Tform.Create(application) as Tform ) do  begin   // Visible:=true;	FormStyle:=fsMDIChild;  end; }end;end.

Se alguem souber de algo... por favor poste aqui!

 

Desde já agradeço!

Um forte abraço!

 

ATT

Mauricio Barros Scotton

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.