Newsgroup: it.comp.lang.visual-basic
Titolo: Creazione di componenti remoti (EXE ActiveX)

Sono giorni che provo a crearne uno ma non riesco; ho seguito questa
procedura :
- ho creato l'EXE activeX (Principale.exe) sul client e quindi l'ho testato
in locale.
- ho copiato il file in una cartella condivisa del Server
- ho registrato il componente nel server (con Principale.exe /REGSERVER)
- ho eseguito sul client il programma Remote Automation Connection Manager
(distribuito con la versione Enterprise di VB6) ed ho impostato i seguenti
valori :
remoto -> COM ditribuito, con indirizzo di rete xxx (nome del mio server);
accesso client : creazioni remote consentite con chiave (e consenti
attivazione remota flaggato).
(ho provato anche con Clireg32.exe fornito sempre da VB6 Enterprise)
- sul server ho configurato DCOM e in particolare il mio componente per la
creazione e accesso consentii a tutti (con tutti i privilegi ecc.)
A questo punto, in teoria il mio Principale.exe sul client dovrebbe far
riferimento a Principale.exe nel server.
Quando dal client eseguo
Private WithEvents P as Principale.Utente
Sub Form_load()
    Set P = CreateObject("Principale.Utente","xxx"),
    mi viene restituito un errore di automazione
End Sub
se invece imposto P
Private P As Principale.Utente
il componente viene creato correttamente nel server; il problema è che
dovrei gestire anche gli eventi della classe Utenti.
Qualcuno sa qualcosa in merito ?
        Grazie in anticipo ...
                    Davide

     mi viene restituito un errore di automazione
Etteccredo !
L' interfaccia restituita da CreateObject (IUnknown, se non erro) non
consente a vb di generarti eventi.
Ciao
Aldo



Caro Aldo,
non capisco esattamente quello che vuoi dire. Il CreateObject permette
tranquiillamente di gestire gli eventi della classe (infatti in locale il
componente funziona benissimo).
Forse il problema sta nel DCOM installato in WinNT Server.
Ho provato anche a cambiare i livelli di autentificazione, di impersonazione
e di identità; l'unica differenza che ho riscontrato è che ora il programma
non restituisce più l'errore di automazione ma si inchioda completamente (e
se eseguo l'applicazione dall'IDE di VB inchioda anche VB)..
Sapete se è possibile reinstallare il DCOM ? i ServicePack sia di VB che di
NT li ho già installati tutti ...
se avete notizie in merito potreste gentilmente replicare a questo post ...
        Grazie
                Davide

 > non consente a vb di generarti eventi.
Questo codice non funziona:
Dim Winsock1 As Winsock
Dim Puntatore As Object
Set Puntatore = CreateObject("MsWinsock.Winsock)
Set Winsock1 = Puntatore <-- riga incriminata
esiste un modo per collegare gli oggetti creati con
CreateObject ad una variabile ben definita?
Quando apro la finestra controlla sull'istanza Object
mi restituisce un bel controllo Winsock.
--
Fibia "Sakamoto" FBI
URL: 
www.geocities.com/fibiafbi
E-Mail: 
fibi...@hotmail.com
ICQ UIN 63586057
Membro #25 delle BT Sez. Sud


Quindi ? ... qual'è lo scopo del tuo intervento in merito alla discussione
aperta ?
Comunque ...
secondo la guida di riferimento di VB (sviluppo dei componenti), non vi sono
sostanziali differenze tra i due metodi di istanziazione New e CreateObject;
l'unica differenze è che New può sfruttare una creazione privata
dell'oggetto (che è molto efficente) nel caso in cui l'istanza da creare sia
fornita da un componente dichiarato all'interno del progetto. In tutti gli
altri casi, la creazione degli oggetti viene implementata tramite il modello
COM.
Per cui, se si volesse utilizzare tale modello (COM) per istanziare una
classe appartenente ad un componente definito all'interno del progetto, è
necessario utilizzare la funzione CreateObject (e non l'operatore New)
Questo dovrebbe assicurare che un oggetto dichiarato con WithEvents può
essere istanziato sia con CreateObject sia con l'operatore New.
Il mio quesito principale è questo :
è possibile gestire gli eventi di un componente remoto  (dichiarando una
variabile con WithEvents) ?
Grazie a tutti ...
        Davide

 variabile con WithEvents) ?
sorry, non so come aiutarti



Opss.. scusami ... non avevo capito ..
comunque non puoi dichiarare la variabile Puntatore direttamente come
MSWinsock.Winsock ?
In questo modo eviteresti anche l'associazione tardiva (o late binding) che
è moooolto meno prestante ...
Prova ...
        Ciao

 che è moooolto meno prestante ...
Chiaramente lo potrei fare, ma supponiamo che volessi istanziarne
uno all'interno di una classe non potrei utilizzare l'operatore new.
cmq non e' un'esigenza personale, vorrei soltanto sapere se
qlc lo sa fare e come si fa


 componente funziona benissimo).
Confermo che ho scritto una cazzata.
Pulite bene le pietre prima di lapidarmi ...
Ciao
Aldo

 Pulite bene le pietre prima di lapidarmi ...
non ci penso nemmeno.
mi conviene pulirle una volta sola, dopo.

 CreateObject ad una variabile ben definita?
premessa: non ho assolutamente provato  :)
Public Function ObjFromPtr(ByVal pObj As Long) As Object
    If pObj = 0 Then Exit Function
    Dim Obj As Object
    CopyMemory Obj, pObj, 4
    Set ObjFromPtr = Obj
    CopyMemory Obj, 0&, 4
End Function
Dim Winsock1 As Winsock
Dim Puntatore As Object
Set Puntatore = CreateObject("MsWinsock.Winsock)
'Set Winsock1 = Puntatore <-- riga incriminata
Set Winsock1 = ObjFromPtr(ObjPtr(Puntatore))
fammi sapere se fa qualcosa di significativo
(tipo una schermata blu, per esempio  ;))
Ciao
Faber

 (tipo una schermata blu, per esempio  ;))
l'idea era molto buona, ma il ragno non e' voluto uscire
dal buco ^__^
schermate blu niente cmq.


 ad un oggetto Winsock un oggetto Object
beh, prova cambiando il prototipo della funzione :)
Public Function WinsockFromPtr(ByVal pObj As Long) As Winsock
;)
Faber

 wrote in message
news:8vkqjd$4ptf6$1...@ID-51318.news.dfncis.de...

Sei proprio senza quore !




 Peccato perche' l'idea non era male :)
L'hai provato tu?
sigh, ci speravo tanto...
