Newsgroup: it.comp.lang.delphi
Titolo: DLL malefica...

Ciao,
Ho creato una semplicissima DLL per caricare i report (Fast Report), 
in pratica ho semplicemente
copiato un Procedura da un mio programma tanto per vedere se 
funzionava, poi ho sostituito la
procedura con una chiamata (statica) allla routine della DLL ma 
ottengo un errore di violazione
di accesso.
Il codice e' banale, quindi devo aver commesso un errore connesso con 
la gestione delle DLL,
solo che essendo la prima volta che mi cimento in queste cose non so 
cosa possa essere sbagliato...
----- report.dll ------
library Report1;
uses
  SysUtils,Classes,FR_Desgn, FR_Class;
Var
    frReport1: TfrReport;
    //frDesigner1: TfrDesigner;
procedure LoadAnteprima;
begin
     // Carica il report da disco
     frReport1.LoadFromFile('MovRep.frf');
     // Visualizza il report dei movimenti del conto
     frReport1.ShowReport;
end;
exports
LoadAnteprima;
begin
end.
-----------------
Nel progetto ci sono gli stessi componenti/variabili, ma non dovrebbe 
significare nulla, no ?
Francesco
IACT Member.
http://Frengo.dragonfire.net/

 ha scritto nel messaggio
news:odyV1f3lyD6W-pn2-sr60IiH043lq@localhost...


     file://frDesigner1: TfrDesigner;


 procedura LoadAnteprima.
Si', penso sia quello il problema, pero' non riesco a creare gli 
oggetti nella DLL :-(
Ovviamente non ho un componente padre (niente form...) e se imposto il
create con
Self si impianta perche' non riconosce la parola, questo con qualsiasi
oggetto...
E poi, il free lo posso mettere subito dopo il load o rischio che mi 
libera la memoria subito
e non vedo io report ? (qui basta fare una prova comunque).


 procedura LoadAnteprima.
Si', penso sia quello il problema, pero' non riesco a creare gli oggetti
nella DLL :-(
Ovviamente non ho un componente padre (niente form...) e se imposto il
create con Self si impianta perche' non riconosce la parola, questo con
qualsiasi oggetto...
<<
Premetto che anch'io non ho esperienza di reports.
Se non hai un Owner da assegnare puoi usare Nil:
TheInstance.Create(nil);
Ovviamente se Owner è Nil la responsabilità di chiamare Free va alla
DLL; puoi esportare una funzione tipo FinitDLL che l'applicazione _DEVE_
chiamare oppure fare il free prima che la DLL sia scaricata v. Help
"Library initialization code", o "The finalization section".
hth
Paolo Arosio

 oggetto...
Non ti riconosce self perché non è corretto in quella posizione, self si 
riferisce all'oggetto di cui è stato invocato un metodo, ed è valido 
solo nel corpo del metodo stesso.
Prova a metterci nil, ma ti deviricordare di liberare la memoria perché 
non c'è nessun Owner che se ne occupi al tuo posto.
-- 
Roberto Lupi

 Roberto Lupi
IACT Member.
http://Frengo.dragonfire.net/

 "Library initialization code", o "The finalization section".
Il nil me lo ha preso, senza alcun esito purtroppo.
Per quanto riguarda Initialization e finalization non sono riuscito a 
capire in che
punto della DLL devo inserirli, ovunque li metto il compilatore mi 
segnala che o non
e' la sezione giusta o si aspetta qualcosa d'altro.
Nell'help questo non e' specificato e non ci sono esempi di codice 
:-((


 ffffffff)
Ciao,
          posto che io passerei il puntatore Self [dove con Self si intende
il puntatore alla form] (con una procedura) alla DLL per poterlo usare
tranquillamente, secondo me il problema sta in quel "ShowReport"...
Se quel metodo mostra qualche finestra/dialog, probabilmente internamente si
fa appoggio alla catena di ownernship per giungere alla form su cui dovrebbe
stare il report...
Il fatto che tu crei il report senza dare un owner che sia un TForm potrebbe
essere la fonte dei tuoi problemi...
Prova a fare un debug accurato osservando quando avviene l'access violation
(prosegui linea per linea fino a individuare la linea icriminata) e, nel
caso, procedi come ti dicevo ad inizio messaggio per risolvere...
Ciao :-)
--
Andrea Magni
E-Mail: 
ama...@interac.it

>
[...]
Il nil me lo ha preso, senza alcun esito purtroppo.
[...]
<<
Mi spiace. Probabilmente il consiglio di A.Magni è la cosa migliore
(passare la form alla dll da utilizzare come Owner)
Mi pare inoltre di ricordare che FastReport è supportato da una
mailinglist (v. 
http://web.tiscalinet.it/joined
)
Saluti
Paolo Arosio