spyke00 0 Denunciar post Postado Março 2, 2007 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
marcio.theis 3 Denunciar post Postado Março 2, 2007 Detalhe mais seu problema, qual a mensagem de erro que acontece ? Compartilhar este post Link para o post Compartilhar em outros sites
spyke00 0 Denunciar post Postado Março 2, 2007 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
marcio.theis 3 Denunciar post Postado Março 2, 2007 Em qual momento você libera a DLL da memória ? Compartilhar este post Link para o post Compartilhar em outros sites
spyke00 0 Denunciar post Postado Março 5, 2007 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
spyke00 0 Denunciar post Postado Março 5, 2007 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