Newsgroup: it.comp.lang.visual-basic
Titolo: Passaggio di Strutture in Eventi

Ciao,
    ho il seguente problema:
dovrei passare una struttura all'interno di un evento di classe di un Server
ActiveX.
Chiaramente per non esporre all'esterno il membro privato ne faccio una
copia..
++++++++++ CORPO DELLA CLASSE +++++++++++++++
Public Type Struttura
    ...
End Type
Private MyStrut As Struttura    'Membro privato
Dim StrutTemp As Struttura      'Struttura di copia
Event Evento(Struct As Struttura)
Public Sub LanciaEvento()
    StrutTemp = MyStrut
    RaiseEvent Evento(StrutTemp)
End Sub
+++++++++++++++++++++++++++++++++++++++++++
Il problema è che l'evento non scatta ma non da nessun errore!!
Qualche idea?

 Qualche idea?
Ho incollato il tuo esatto codice in una classe di una DLL ActiveX
(aggiungendo solo due membri "a As String", "b As Long" alla definizione
della struttura) e l'ho istanziata da un exe standard: funziona tutto
correttamente
Bisognerebbe verificare il tuo codice chiamante per essere sicuri che stia
chiamando il metodo LanciaEvento *sulla stessa istanza* dichiarata
WithEvents
Ciao
--
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown

 WithEvents
Ho fatto uno stupido programmino di prova e ho creato solo una istanza
dell'oggetto!
Ciao e grazie!!

 questo a cui passo un tipo definito da me che non funge!
Definisci "non *FUNZIONA*" (e impariamo l'italiano: "fungere" è un altro 
verbo).
Sarebbe comodo capire cosa e come gestisci questa classe dal programma 
chiamante.
Ciao

 chiamante.
Cerco di spiegarmi:
++++++++++ CORPO DELLA CLASSE +++++++++++++++
Public Type Struttura
    ...
End Type
Private MyStrut As Struttura    'Membro privato
Dim StrutTemp As Struttura      'Struttura di copia
Event Evento(Struct As Struttura)
---------------------------------------------
Public Sub LanciaEvento()
    StrutTemp = MyStrut
    RaiseEvent Evento(StrutTemp)
End Sub
---------------------------------------------
Private Sub Class_Initialize()
    'Inizializzo la struttura
    MyStruct.Membro1=....
End Sub
+++++++++++++++++++++++++++++++++++++++++++
Nel Client ho un form con un pulsante.
++++++++++ CORPO DELLA CLIENT ++++++++++++++
Dim WithEvents Oggetto As MiaClasse
---------------------------------------------
Private Sub Form_Load()
    Set Oggetto = New MiaClasse
End Sub
---------------------------------------------
Private Sub Form_Unload(Cancel As Integer)
    Set Oggetto = Nothing
End Sub
---------------------------------------------
Private Sub Command1_Click()
    Oggetto.LanciaEvento
End Sub
---------------------------------------------
Private Sub Oggetto_Evento(Struct As Struttura)
    MsgBox "Scattato Evento!"
End Sub
+++++++++++++++++++++++++++++++++++++++++++
Praticamente quando premo il pulsante mi dovrebbe scattare l'evento.
Ma questo non si verifica.
Per prova, ho provato ad inserire un ulteriore evento che viene lanciato nel
metodo LanciaEvento dell'oggetto:
Event Evento2 (Nome As String)
Public Sub LanciaEvento()
    StrutTemp = MyStrut
    RaiseEvent Evento(StrutTemp)
    RaiseEvent Evento2("Pippo")
End Sub
In questo caso, il primo evento (quello incriminato) non scatta, ma il
secondo (che ha un semplice parametro stringa) si!!
Purtroppo di questa cosa nella documentazione non ho trovato grandi aiuti!
Ciao.

 questo a cui passo un tipo definito da me che non funge!
Non hai capito: ho aggiunto i due membri "a" e "b" alla definizione *della
struttura* (al posto dei "..." del tuo esempio), e ho lasciato intatto il
parametro dell'evento "Struct As Struttura", e come gia' detto, funziona.
Vedi anche l'altro mio messaggio


 Ma questo non si verifica.
Ho riprovato, di nuovo con un copy&paste del tuo codice e dopo le necessarie
correzioni, continua a funzionare regolarmente come la prima volta...
evidentemente nel tuo codice "reale" c'e' qualche altro dettaglio che non
hai postato
A scanso di dubbi, ecco l'esatto codice che ho provato io:
'Codice completo della mia classe in un progetto DLL
Option Explicit
Public Type Struttura
    Membro1 As String
End Type
Private MyStrut As Struttura    'Membro privato
Dim StrutTemp As Struttura      'Struttura di copia
Event Evento(Struct As Struttura)
Public Sub LanciaEvento()
    StrutTemp = MyStrut
    RaiseEvent Evento(StrutTemp)
End Sub
Private Sub Class_Initialize()
    'Inizializzo la struttura
    MyStrut.Membro1 = "prova"
End Sub
'Codice completo della mia form in un progetto Exe
Option Explicit
Dim WithEvents Oggetto As MiaClasse
Private Sub Form_Load()
    Set Oggetto = New MiaClasse
End Sub
Private Sub Form_Unload(Cancel As Integer)
    Set Oggetto = Nothing
End Sub
Private Sub Command1_Click()
    Oggetto.LanciaEvento
End Sub
Private Sub Oggetto_Evento(Struct As Struttura)
    MsgBox "Scattato Evento!" & Struct.Membro1
End Sub


 hai postato
Mmmm...accidenti!
Proverò a ricontrollare tutto più minuziosamente.
L'unica differenza nel mio caso è che io ho un Server ActiveX (quindi un
oggetto out-of-process).
Ma non credo voglia dire poi tanto...se mai provo a ricompilarlo togliendo
la compatibilità!
Grazie ancora!
Ciao!

 ha scritto nel messaggio
news:8jeCb.179886$vO5.7...@twister1.libero.it...

Qui in ditta, abbiamo notato che su alcuni computer l'applicazione funziona
regolarmente, su altri (compreso il mio) no. I SO sono tutti Win98 SE,
sinceramente non so come muovermi...qualche idea?