Newsgroup: it.comp.lang.delphi
Titolo: Package: Aiuto!!!

Ciao a tutti, avrei intenzione di sviluppare un'applicazione modulare.
Per fa questo mi è stato consigliato qua sul newsgroup di utilizzare i 
package invece delle dll in quanto inserire una classe all'interno di un 
package è meglio.
Ho provato a leggere la guida e a cercare documentazione su internet ma non 
riesco a risolvere il mio problema.
Ho creato la mia applicazione all'interno della quale è presenta una classe 
"Interfaccia" che presenta tutti i metodi astratti del mio oggetto.
All'interno del package ho inserito la stessa classe e la classe 
dell'oggetto vero e proprio che naturalmente estende la precedente.
Per caricare il package a runtime uso la seguente procedura :
var
      PackageModule: HModule;
      AClass: TPersistentClass;
begin
      PackageModule := LoadPackage('Prova.bpl');
      if PackageModule <> 0 then
          begin
                AClass := GetClass('Nuova');
                if AClass <> nil then
                   Oggetto := TInterfaccia (Aclass).Create; *
          end;
    UnloadPackage(PackageModule);
end;
Alla riga indicata dall'asterisco ricevo sempre un messaggio di errore. Non 
riesco proprio a risolverlo. Dove sbaglio?
Grazie a tutti 

 riesco proprio a risolverlo. Dove sbaglio?
x iniziare sbagli ng.
questo č un ng di sviluppatori e non di utenti finali.
Solo un utente finale scrive su un ng di sviluppatori "ho un errore" 
senza indicare il messaggio di errore, quando succede etc.
-- 
Alberto Salvati
A NEAPOLITAN Delphi Developer who is studying c# and .net
"Dicette 'o pappece 'nfaccia 'a noce dammi 'o tiempo che pure te spertoso"

 indicare il messaggio di errore, quando succede etc.
Scusa ma ho riportato il codice che utilizzo, indicando la riga che mi causa 
l'errore. E' vero non ho riportato il messaggio d'errore ma non mi sono 
limitato a dire ho un errore.
Comunque il messaggio d'errore che si verifica nel momento in cui provo ad 
utilizzare la classe ricavata dal package è il seguente "acces violation at 
address C08B00DF. Read address C08B00DF".
Se inserisco una form all'interno del package riesco tranquillamente a 
richiamarla, ma se inserisco una mia classe quando vado a creare un oggetto 
ricevo sempre questo errore. Procedo nello stesso modo. Dove sbaglio? 

                    Oggetto := TInterfaccia (Aclass).Create; *
sembra che il cast da AClass a TInterfaccia non riesca, prova a registrare 
la classe con RegisterClass e/o controllare di che classe è Oggetto con
  ShowMessage(Oggetto.ClassName)
-- 
Mauro Falzari 
   [ 
http://digilander.libero.it/mauro.falzari
 ]
 
 "Se guardi nell'abisso, anche l'abisso guarda in te." 
   (Friedrich Nietzsche)

 ricevo sempre questo errore. Procedo nello stesso modo. Dove sbaglio? 
Non erediti la tua classe da TPersistent.
Ciao,
Andrea


Si la eredito da Tpersistent
Comunque sembra che abbia risolto usando
         Tmp := GetClass('TNuovo');
         if Assigned (Tmp) then
            Begin
               Nuovo := Tmp.Create;
               Oggetto := TInterfaccia (Nuovo);
            End;
dove Nuovo č un oggetto TPersistent e Oggetto č un oggetto TInterfaccia (La 
mia classe astratta).
Non č che mi piace molto ma per ora sembra andare :)
Ciao e grazie 

 Non erediti la tua classe da TPersistent.
non ho fatto prove, ma non è che dovrebbe ereditare da TInterfacedObject, 
invece (e attenersi alla liberazione di memoria degli oggetti di tipo 
interfaccia, che vengono liberati automaticamente non appena il loro 
reference-count va a zero = non bisogna chiamare il Free) ?
Col beneficio del dubbio.


 non ho fatto prove, ma non è che dovrebbe ereditare da TInterfacedObject, 
Voglio sperare che non desiderasse chiamare una interfaccia, perché
altrimenti mi sa che nemmeno quello che ha scritto lui va benissimo.
Ad ogni modo, qualora fosse quello che intendeva fare, avrebbe dovuto
ereditare da TInterfacedPersistent, secondo me.
Andrea