Newsgroup: it.comp.lang.visual-basic
Titolo: [?2] chiusura oggetto

Ciao a tutti,
ho un problema di questo tipo:
Ho un pgm che richiama un ActiveX ma quando questo si chiude, me l ritrovo
ancora tra i task attivi.
Sia nell'ActiveX che nel pgm chiamanto setoo a Nothing l'oggetto.
Grazie.
Ciao.
PRG

 Sia nell'ActiveX che nel pgm chiamanto setoo a Nothing l'oggetto.
??? nell'activeX o nel Prg?
Un activeX-exe rimane in vita fincheč tutte le app che lo usano non sono
chiuse.
Ciao
--
' // Initialize the expression evaluator
Engines.Evaluator = CreateObject("
http://www.neodatatype.net
")
' // you can find resources for and from the NG here!
Me.SitoComune = "
http://www.it-lang-vb.net
"


Grazie per la risposta.
In effetti non ho specificato che fosse un ActiveX EXE.
Comunque me lo ritrovo tra i task e quando chiudo tutti i pgm che lo
chiamano, rimane attivo.
Ciao.
PRG

 chiamano, rimane attivo.
Questo è quanto riportato da msdn (basta cercare ActiveX nell'indice).
Ciao
---
Component Shutdown
Your component should shut down when all clients have released all
references to the objects the component provides. (A desktop application
that provides objects is an exception to this rule.)
Visual Basic does a number of things to make it easy for your component to
shut down properly. The most important of these is keeping track of
references to your public objects, because your component should never close
while clients still hold references to objects.
Important   Only references to public objects will keep a component running.
References to private objects — objects provided by Visual Basic, or objects
from classes marked Private — will not prevent component shutdown and
subsequent catastrophic failure of the client. References to private objects
should never be passed to clients.
The rules Visual Basic uses to determine when to shut down are different for
in-process and out-of-process components.
Out-of-Process Component Shut Down
An out-of-process component written with Visual Basic will shut down when:
  a.. The component has no forms loaded.
  A loaded form will keep your component running past the point at which all
references have been released. Forms should be unloaded when the object that
created them terminates.
  b.. No out-of-process client applications are holding references to the
component’s public objects.
  Internal references to public objects will not keep a component running if
clients have released all their references. Neither will references held by
an in-process component the out-of-process component is using.
  c.. No code in the component’s modules is currently executing, or in the
calls list waiting to be executed.
  d.. The component is not in the process of being started in response to a
client application’s request for an object.


 chiuse.
Ciò nonostante, a me capita spesso di vedere activex-exe (anche elementari,
quindi presumo non abbiano problemi di riferimenti circolari etc.) che
restano effettivamente in memoria nonostante siano rispettate tutte le
condizioni elencate dal documento di MS. Qualche dubbio in merito, quindi,
ce l'ho anch'io. Se PRG è sicurissimo di aver fatto tutto quello che serve,
forse non gli resta che terminare il programma da codice (lo so, lo so...).
Per dire che quest'oggettino qualche cosa di strano lo fa, a me sono
capitati altri fenomeni strani con gli activex-exe. P.es. capita che un
activex-exe non sia più riconosciuto/eseguito correttamente da windows. Si
ottiene così il classico errore di impossibilità di creare l'oggetto.
Apparentemente questo avviene quando un un activex-exe installato (con PDW)
come parte di un setup, viene disinstallato con la stessa procedura. In
seguito, a niente vale resinstallare il prg (se si esegue una verifica
manuale, tutti i componenti sono installati e registrati correttamente). Una
volta ho eseguito personalmente un debug di una situazione del genere e il
comportamento dell'activex era il seguente: la classe pubblica viene in
effetti creata, entra nella Initialize, esce e il chiamante genera l'errore
(tipo: incubo).
--
rumplestiltskin

 chiamano, rimane attivo.
Assicurati anche che:
Non esistano riferimenti circolari (programma che crea un riferimento
all'ActiveX, che crea un riferimento ad una classe del programma)
Se il tuo ActiveX visualizza o anche solo carica in memoria delle form,
queste vengano scaricate correttamente.
Ciao
--
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown

 forse non gli resta che terminare il programma da codice (lo so, lo
so...).
Grazie per la risposta.
Per terminare il pgm da codice cosa intendi?
Se intendi impostare l'oggetto a Nothing, l'ho già fatto. Altrimenti non
saprei come fare.
[CUT]
Ciao
PRG


- è quello che non riesco a capire
Grazie
Ciao
PRG


 saprei come fare.
Io te lo dico, ma rischio le palle su questo ng, quindi non dire che te l'ho
detto io!-P
Se *proprio* sei sicuro di aver rimosso ogni riferimento, puoi creare un
metodo pubblico dell'activex-exe nel quale butti una brutale "End". Può
darsi che questo causi un errore nel prg chiamante (non so per certo come
gestisca una cosa del genere) che forse potresti ignorare.
--
rumplestiltskin

 detto io!-P
Odo una voce angelica... ;-)
End!