Newsgroup: it.comp.lang.visual-basic
Titolo: Usare CreateObject per gli oggetti locali?

Salve,
Mi domandavo se era possibile un uso di questo tipo.
Mi sembrava di aver letto di no, ma da alcune prove
apparentemente sembra di si.
Chi mi illumina?
Andrea

 Mi domandavo se era possibile un uso di questo tipo.
ehm... cosa intendi per oggetti locali?
Salutoni
Sergio

 Sergio
Andrea

 Andrea
Andrea

 Intendo dire classi definite nello stesso progetto di "richiamo".
Grazie.
Curiosità: il progetto di richiamo, che funge anche da contenitore della
classe, è un exe active x?
Salutoni
Sergio

 Qualche idea?
Scusa la banalità della risposta.... ma l'operatore new?
Salutoni
Sergio

 Sergio
Andrea

 l'interno?
direttamente da msdn(possibile che ti sia sfuggito?):
La funzione CreateObject utilizza sempre i servizi COM per la creazione di
oggetti, indipendentemente dal fatto che venga utilizzata per creare oggetti
forniti esternamente oppure istanze di classi che fanno parte del progetto.
Pertanto per CreateObject non c'è alcuna differenza tra la creazione di
oggetti interni ed esterni.
Quando tuttavia si utilizza l'operatore New o una variabile dichiarata come
As New per creare un'istanza di una classe che fa parte del progetto, in
Visual Basic viene utilizzata un'implementazione privata molto efficace
della creazione COM di oggetti.
In altre parole, Visual Basic utilizza la stessa tecnica per qualsiasi
creazione di oggetti ad eccezione della creazione di oggetti con New o As
New da classi del progetto. Questo è riassunto nella seguente tabella.
Oggetto creato da Tramite CreateObject Tramite New, As New
Una classe fornita da un altro componente Servizi COM per la creazione di
oggetti Servizi COM per la creazione di oggetti
Una classe che fa parte del progetto Servizi COM per la creazione di oggetti
Creazione privata di oggetti Visual Basic
Nota   La funzione CreateObject non può essere utilizzata per classi la cui
proprietà Instancing è Private o PublicNotCreatable. L'operatore New può
invece essere utilizzato per qualsiasi classe.
Di seguito sono illustrati alcuni esempi specifici delle sottili differenze
che possono insorgere in conseguenza del metodo utilizzato per creare
oggetti da classi che fanno parte del progetto.
Oggetto creato da                                      Tramite CreateObject
Tramite New, As New
Una classe fornita da un altro componente   Servizi COM per la creazione di
oggetti              Servizi COM per la creazione di oggetti
Una classe che fa parte del progetto            Servizi COM per la creazione
di oggetti              Creazione privata di oggetti Visual Basic
Se si utilizza l'operatore New per creare un'istanza di una classe
SingleUse, l'oggetto verrà creato nell'istanza corrente del programma, come
se la relativa proprietà Instancing avesse valore MultiUse. Utilizzando
CreateObject verrà avviata un'altra istanza del componente. Vedere
"Scalabilità su processi multipli: oggetti SingleUse".
In un componente out-of-process a thread multipli con threading di tipo
round-robin o thread-per-oggetto, un'istanza di qualsiasi classe creabile
esternamente del progetto creata con l'operatore New condividerà il thread
dell'oggetto che ha eseguito New, mentre un'istanza creata tramite
CreateObject si troverebbe su un altro thread.
In un componente sviluppato per l'utilizzo con Microsoft Transaction Server,
un'istanza di qualsiasi classe creabile esternamente del progetto creata con
l'operatore New non verrà riconosciuta da Microsoft Transaction Server. Gli
oggetti destinati all'utilizzo con Microsoft Transaction Server devono
essere creati tramite CreateObject.
Ciao
Alessandro
--
Morfeus®
Free Joint
:PII

 Alessandro
Andrea

 Fai una prova con CreateObject( "NomeClasse" ) e poi vediamo ^_^
Ovviamente NomeClasse deve appartenere allo stesso progetto...
Andrea

 Ovviamente NomeClasse deve appartenere allo stesso progetto...
Ovviamente visto che createobject utilizza sempre i *servizi com* questi
devono essere registrati nel registro di configurazione.Per creare un
istanza a run time dovresti registrarlo a run time e ricavarne il CLSID per
utilizzare CreateObject.Francamente penso che Utilizzare l'operatore New sia
meno complicato(a run time,infatti devi registrare il componente e
richiamarti il CLSID registrato).
In ogni caso quando crei un oggetto si *dovrebbe* scrivere
dim obj as object
Set obj=createobject("Progetto1.Class1")
crea un progetto1.DLL contente la tua classe e compilalo e registralo con
regsrv32
fai *tu* le prove e poi facci sapere ;)
