Newsgroup: it.comp.lang.delphi
Titolo: Assurdo...

Scusate, forse sono stanco ed ho bisogno di ferie... ma qualcuno mi sa
spiegare perché questo codice (che allego al fondo) mi da come errore
"Runtime error 216 at...." alla prima riga?
Grazie.
DR
unit ConfigUnit;
interface
type
  TConfig = class
  private
    { Private declarations }
  public
    SrcPath: AnsisTring;
    procedure Information ();
  end;
var
  Config: TConfig;
implementation
uses SysUtils, Forms;
{ TConfig }
procedure TConfig.Information;
begin
//Recupero il path del programma
  SrcPath:= ExtractFilePath(Application.ExeName);
...
end;
end.

 "Runtime error 216 at...." alla prima riga?
Che tipo di applicazione stai realizzando?
VCL Forms? Console?
In quale "momento" del tuo programma viene richiamato il metodo che 
genera l'errore?
Ciao,
   Marco.
-- 
MARCO BREVEGLIERI
  (
http://www.marco.breveglieri.name
)

>   SrcPath:= ExtractFilePath(Application.ExeName);
Può essere che la Application non è ancora istanziata?
Provato con ParamStr(0)?
Bye,
Raktzo

Il mio programma è una VCL Form (ma questa unit non ha nessuna form).
Si genera sulla prima riga cioè:
  SrcPath:= ExtractFilePath(Application.ExeName);
ma ho provato a fare anche:
  SrcPath:='pippo'; 
e l'errore si genera comunque...
Ciao,
DR

Sta cosa qua funziona senza errori, che differenza c'è con la tua?
Bye,
Raktzo
type
  TConfig = class
  private
  public
    SrcPath: AnsisTring;
    procedure Information ();
  end;
var
  Config: TConfig;
implementation
uses SysUtils;
{ TConfig }
procedure TConfig.Information;
begin
//Recupero il path del programma
  SrcPath:= ExtractFilePath(ParamStr(0));
end;
initialization
 with TConfig.Create do
  try
   Information
  finally
   Free;
  end;

 e l'errore si genera comunque...
Domanda banale: hai creato un'istanza della tua classe TConfig prima di 
richiamarne il metodo "Information"?


 Provato con ParamStr(0)?
Non credo ci sia molta differenza, in quanto
   function TApplication.GetExeName: string;
   begin
     Result := ParamStr(0);
   end;
:-)


> Non credo ci sia molta differenza, in quanto
C'è differenza se Application non è istanziato
Bye,
Raktzo

..dover aprire un post x capire quale è il problema. :-(
Chiudi delphi, riavvia il pc e riprova.
AS

Proverò a fare così...
Grazie a tutti,
DR

 C'è differenza se Application non è istanziato
Se usa /Application/ (e riesce a compilare, oviamente), l'oggetto è 
istanziato per forza. :-/


 istanziato per forza. :-/
uses
  MyUnit,
  Forms,
  altreunit;
l'initialization di MyUnit viene eseguita prima di Forms e Application in
qual momento non è istanziata.
Utilita? Complicarsi la vita.
A parte gli scherzi è utile per qualche gestore di memoria, o per fare
operazioni prima ancora che la VCL si avvii, o impostare la VCL stessa.
Bye,
Raktzo

 operazioni prima ancora che la VCL si avvii, o impostare la VCL stessa.
La VCL non è qualcosa che si avvia; anche la funzione ParamStr fa parte 
della VCL (ad essere precisi, della RTL, ma si tratta di una 
suddivisione puramente logica adottata anche nei package che 
costituiscono il "core" del linguaggio).
Penso che il problema del nostro amico, in particolare, sia dovuto ad 
altro, ma non risponde più né scrive nulla. :-/


 altro, ma non risponde più né scrive nulla. :-/
Ecco, tornando a Bomba, li c'erano 2 oggetti, qualcuno di quelli non era
istanziato, peccato non si faccia sentire..
Bye,
Raktzo

 istanziato, peccato non si faccia sentire..
Sono d'accordo. Quello che volevo solamente cercare di sottolineare è il 
fatto che, tra questi oggetti, è difficile che quello non inizializzato 
sia Application in quanto la sua creazione avviene, anche se 
indirettamente (con routine di supporto) nella sezione *initialization* 
della unit /Controls/ da cui dipende /Forms/ di cui, a sua volta, 
occorre fare uso per accedere all'oggetto Application stesso.
Poi, che si preferisca usare ParamStr(0) o Application.ExePath in 
un'applicazione VCL Forms come quella in esame, è questione di gusti, 
alcuni magari più "routine centrici", altri più "OOP centrici", niente 
di più.


 ha scritto nel messaggio 
news:1133453363.8...@g44g2000cwa.googlegroups.com...


 funzione hai creato l'istanza dell'oggetto?
E' la stessa domanda che ho posto io... ma non ho ancora avuto risposta. ;-)


Quando chiami la procedura Information ?
Oltre tutto ma hai dichiarato procedure Information (); (con le 
parentesi) e non ti ha dato errore? Se si togliele.

 sopra.
E invece no, la creazione dei vari handle sul SO è un avvio. Gli eventuali
legami con bpl esterni è un avvio.
Salvo che la CLX si muova diversamente dalla VCL, ma quando ci lavoravo
(fino a D5) non mi sembra che fosse tanto diversa.
Bye,
Raktzo

 (fino a D5) non mi sembra che fosse tanto diversa.
Ci rinuncio. ;-)


 parentesi) e non ti ha dato errore? Se si togliele.
Le parentesi sono ininfluenti, don't worry... ;-)


"Runtime error 216 at...." alla prima riga?
Hai controllato che non sia per questo? :
http://support.microsoft.com/?kbid=259279

[...]la creazione dei vari handle sul SO è un avvio.
Si chiama "inizializzazione", non avvio.

 all'esperienza? Provala e vedrai che non funziona come dici tu. :-)
L'esempio che ho postato con il TConfig funziona, provato su K3.
Bye,
Raktzo

 qual momento non č istanziata.
Ciň che ho detto io č che, come nel caso in esame proposto dall'autore 
originale della discussione, la unit /MyUnit/ fa internamente uso della 
variabile /Application/ e quindi, nonostante il file DPR elenchi le unit 
nell'ordine che hai descritto, la unit /Forms/ viene inizializzata per 
prima, o comunque prima di /MyUnit/. Confermi o smentisci?


 scritto un'imprecisione. Tu hai scritto precedentemente:
Credo si stia parlando (per lo meno per lo spezzone funzionante) di due post
diversi.
Quello funzionante e provato con K3 è il post del 1/12 17.28.
Bye,
Raktzo

diversi.
Continui a girarci attorno ;-)
Non mi sembra abbia importanza di quali post si stia parlando.
Marco ha specificato una cosa esatta, riprendendo una cosa errata da
te detta.  Il modo in cui avviene l'inizializzazione delle unit, in
Delphi, fa sě che il problema dell'OP non si dovuto ad essa.

 Chiudi delphi, riavvia il pc e riprova.
Rotfl!! ^_^
Cmq spesso e volentieri funziona! :-D
Sta cosa mi ricorda la barzelletta sui 3 ingegneri sulla 500 che ha dei 
vuoti mentre va e l'ingegnere informatico dice di provare a spegnerla e 
riaccenderla =:-D