Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

studiando una classe e un controllo mscomm

1 view
Skip to first unread message

Mizio

unread,
Feb 17, 2005, 3:51:40 PM2/17/05
to
Salve,
ogni tanto mi riaffaccio sul ng, ed ogni volta con una domanda :-)
In un programma che sto portando avanti da un bel po, ho bisogno di
utilizzare un controllo mscomm, e fin qui nessun problema.
Mi sono messo in testa di definire una classe, semplicemente per iniziare ad
usarla ed imparare qualche cosa di piu'.
Avrei quindi bisogno di dichiarare un oggetto mscomm all'interno di questa
classe.
Ho provato con (in un modulo di classe):
...
Private ComClass as MSComm
...
Private Sub Class_Initialize()
ComClass.CommPort = 1

Il compilatore a questo punto mi restituisce un errore :"Variabile oggetto o
variabile del blocco with non impostata.

Cercando fra i vecchi post del ng (si, lo ho fatto, prima di scrivere
:-))) ), trovo un'istruzione del tipo:
Set ComClass = CreateObjet (e l'oggetto che era un Winsock).

Ho immaginato che come prima cosa bisognasse creare l'oggetto MSComm, ed ho
provato a digitare:

Set CommClass = CreateObject ("MSComm")

A questo punto ho un errore:
Errore di runtime 429
Il componente ActiveX non puo' creare l'oggetto.

Cosa sbaglio?
Forse il "MSComm" del CreateObject?
Se cosi',dove posso trovare documentazione su come creare oggetti?
Grazie della pazienza.... Maurizio


hal1961

unread,
Feb 17, 2005, 4:09:45 PM2/17/05
to
Mizio wrote:

> Private ComClass as MSComm
> ....


> Private Sub Class_Initialize()
> ComClass.CommPort = 1
>
> Il compilatore a questo punto mi restituisce un errore :"Variabile oggetto o
> variabile del blocco with non impostata.
>
> Cercando fra i vecchi post del ng (si, lo ho fatto, prima di scrivere
> :-))) ), trovo un'istruzione del tipo:
> Set ComClass = CreateObjet (e l'oggetto che era un Winsock).
>
> Ho immaginato che come prima cosa bisognasse creare l'oggetto MSComm, ed ho
> provato a digitare:
>
> Set CommClass = CreateObject ("MSComm")
>
> A questo punto ho un errore:
> Errore di runtime 429
> Il componente ActiveX non puo' creare l'oggetto.
>
> Cosa sbaglio?

MSComm non e' creabile. Devi passartelo come parametro, prendendolo
da un form che lo ospiti.

L' ideale sarebbe poter passare il riferimento al costruttore della
tua classe, ma con vb6 non si puo' :-(
Devi percio' definirti una proprieta' o un metodo appositi.
Ad esempio:

nel tuo modulo .cls:

Private mMsComm As MSComm

Public Sub Init(ByRef aMsComm As MSComm)
Set mMSComm = aMSComm
End Sub

--
ciao, hal

Mizio

unread,
Feb 17, 2005, 4:21:27 PM2/17/05
to
Beh, prima cosa, grazie per la risposta immediata :)
...
> MSComm non e' creabile
...
Ecco, sembra che me li vado a cercare... prima esperienza con una classe e
subito trovo qualche cosa che non si puo' fare. :-))))
....

Devi passartelo come parametro, prendendolo
> da un form che lo ospiti.
[...]

> Ad esempio:
>
> nel tuo modulo .cls:
>
> Private mMsComm As MSComm
>
> Public Sub Init(ByRef aMsComm As MSComm)
> Set mMSComm = aMSComm
> End Sub
...
No, aspetta, non ho capito....
Ammettiamo che ho un Form che si chiama frmMain in cui ho un controllo
MSComm.
Come faccio funzionare la classe?
Poi, in quel form istanzio un oggetto (che fa riferimento alla classe) che a
sua volta fa riferimento ad un oggetto del form chiamante?
E se volessi utilizzare la classe in altri form, devo mettere in ciascuno di
essi un controllo MSComm?
Che giochetto!!! :-)
Ciao... Maurizio


hal1961

unread,
Feb 17, 2005, 5:03:35 PM2/17/05
to
Mizio wrote:
> Beh, prima cosa, grazie per la risposta immediata :)

Di nulla, passavo di qua :-P

>>MSComm non e' creabile
>
> ....


> Ecco, sembra che me li vado a cercare... prima esperienza con una classe e
> subito trovo qualche cosa che non si puo' fare. :-))))

Dove sarebbe il divertimento, altrimenti? ;-)

[cut]


> Ammettiamo che ho un Form che si chiama frmMain in cui ho un controllo
> MSComm.
> Come faccio funzionare la classe?

Ad esempio da qualche parte nel form tanto a livello di dichiarazioni
(probabilmente il caso tuo) come di singola procedure, dipende da cosa
vuoi fare, ti dichiari la variabile del tipo MiaClasse:

Private mMiaClasse As MiaClasse

Poi, magari la inizializzi nel load:

Set mMiaClasse = New MiaClasse()
mMiaClasse.Init(MSComm1)

> E se volessi utilizzare la classe in altri form, devo mettere in ciascuno di
> essi un controllo MSComm?

Ni...

Potresti anche passarti la reference allo stesso controllo.
Oppure, ti passi la reference al Form ed aggiungi, questa
volta dinamicamente, il controllo:

Set mMiaClasse = New MiaClasse()
mMiaClasse.Init(Me)

In questo caso supponiamo che l'Init abbia un'altra firma
nel modulo MiaClasse.cls:

Public Sub Init(ByRef aParent As Form)
Set mMSComm = aParent.Controls.Add(.... vedi guida ;-)

Roberto Cortiana

unread,
Feb 18, 2005, 2:25:40 AM2/18/05
to

"hal1961"
<hal...@abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.com
> ha scritto nel messaggio
news:sK7Rd.52172$2h5....@tornado.fastwebnet.it...

> MSComm non e' creabile. Devi passartelo come parametro, prendendolo
> da un form che lo ospiti.
>
> L' ideale sarebbe poter passare il riferimento al costruttore della
> tua classe, ma con vb6 non si puo' :-(
> Devi percio' definirti una proprieta' o un metodo appositi.
> Ad esempio:
>
> nel tuo modulo .cls:
>
> Private mMsComm As MSComm
>
> Public Sub Init(ByRef aMsComm As MSComm)
> Set mMSComm = aMSComm
> End Sub
>
> --
> ciao, hal

Io tempo fa avevo creato un progetto DLL Activex dove avevo creato un modulo
con la dichiarazione :

Public PLC As MSComm

e una classe in cui andavo ad utilizzare questo controllo:

Private Sub Class_Initialize()
Set PLC = New MSComm
End Sub

e tutto mi funziona correttamente.
( Non so se č dovuto al fatto che il progetto era una DLL Activex)

ciao, roby


hal1961

unread,
Feb 18, 2005, 3:15:07 AM2/18/05
to
Il 18 Feb 2005, 08:25, "Roberto Cortiana" <roby...@libero.it> ha scritto:

> Io tempo fa avevo creato un progetto DLL Activex dove avevo creato un
modulo
> con la dichiarazione :
>
> Public PLC As MSComm
>
> e una classe in cui andavo ad utilizzare questo controllo:
>
> Private Sub Class_Initialize()
> Set PLC = New MSComm
> End Sub
>
> e tutto mi funziona correttamente.
> ( Non so se č dovuto al fatto che il progetto era una DLL Activex)

Sei sicuro?
Poiche' mi hai messo la pulce nell'orecchio, ho appena provato a
a compilare una New sia in un exe che in una dll, tanto in un form
come in una class e con e senza riferimento diretto all'ocx, ma:
- con New non compila proprio: mi da' Invalid use of New Keyword;
- con CreateObject compila, ma in esecuzione da' errore di tipo.

Contesto:
Visual Basic 6 Eng Ent SP5, O.S. Windows 2000 Pro SP4 Eng

--
ciao, hal

--------------------------------
Inviato via http://arianna.libero.it/usenet/

Roberto Cortiana

unread,
Feb 18, 2005, 3:30:22 AM2/18/05
to
A me funziona.
Ho appena fatto una ulteriore prova:
Ho inserito un riferimento al file \system32\Mscomm32.ocx
Sono riuscito a compilare una New in un exe standard, sia su un form che in
una class.

Contesto:
Visual Basic 6 Ita Professional SP5 , O.S. Windows 2000 pro SP4 Ita

ciao, roby

"hal1961" <hal...@despammed.com> ha scritto nel messaggio
news:83Z103Z67Z126Y1...@usenet.libero.it...

hal1961

unread,
Feb 18, 2005, 3:41:17 AM2/18/05
to
Il 18 Feb 2005, 09:30, "Roberto Cortiana" <roby...@libero.it> ha scritto:
> A me funziona.
> Ho appena fatto una ulteriore prova:
> Ho inserito un riferimento al file \system32\Mscomm32.ocx
> Sono riuscito a compilare una New in un exe standard, sia su un form che
in
> una class.
>
> Contesto:
> Visual Basic 6 Ita Professional SP5 , O.S. Windows 2000 pro SP4 Ita

Incredibile!
Hai voglia di mandarmi uno zippino con il sorgente direttamente in mail?
('indirizzo che vedi e' valido)
Spero di riuscire a capire cosa sbaglio.

Grazie in anticipo,

--

hal1961

unread,
Feb 18, 2005, 4:17:21 AM2/18/05
to
Il 18 Feb 2005, 09:41, hal...@despammed.com (hal1961) ha scritto:

> Hai voglia di mandarmi uno zippino con il sorgente direttamente in mail?
> ('indirizzo che vedi e' valido)
> Spero di riuscire a capire cosa sbaglio.

Ho ricevuto e provato.
Ringrazio pubblicamente Roberto per la disponibilita' :-)

Riporto qui l'esito in modo che possa essere utile anche ad altri.
Il sorgentino di Roberto ha funzionato alla prima :-)

L'inghippo era che dal mio vb non viene mostrato, da Project / References
il riferimento a mscomm32, neanche dopo aver cercato esplicitamente
il file mscomm32.ocx . Ho dovuto aprire il file .vbp con notepad per
capirlo.

A questo punto posso rimangiarmi la mia prima risposta data all'OP :-)

Affinche' l'OP possa realizzare il proprio intento deve aggiungere
una reference (non come controllo, ma proprio come riferimento)
alla libreria mscomm32.ocx. In questa maniera e' possibile istanziare
un oggetto mscomm direttamente in early binding tramite New.

Ringrazio sinceramente ancora Roberto per la disponibilita' :-)

--
ciao, hal

Roberto Cortiana

unread,
Feb 18, 2005, 4:29:03 AM2/18/05
to

"hal1961" <hal...@despammed.com> ha scritto nel messaggio
news:83Z103Z67Z126Y1...@usenet.libero.it...
> Il 18 Feb 2005, 09:41, hal...@despammed.com (hal1961)
ha scritto:

> Ringrazio sinceramente ancora Roberto per la disponibilita' :-)


di nulla.
ciao, roby


Mizio

unread,
Feb 18, 2005, 5:20:42 PM2/18/05
to
...

> A questo punto posso rimangiarmi la mia prima risposta data all'OP :-)
....
Buah, ed io che mi vado pure a fidare :-))))
...

> Affinche' l'OP possa realizzare il proprio intento deve aggiungere
> una reference (non come controllo, ma proprio come riferimento)
> alla libreria mscomm32.ocx.
...
Dunque, cerchiamo di capirci (vabbe', lo so che sono io che non capisco)...
In Progetto/Componenti ho il segnetto di spunta su Microsoft Comm Control
6.0
In Progetto/Riferimenti (ti riferivi a questo, vero?) non trovo nessun
mscomm32.ocx
A questo punto?
Grazie e ciao.... Maurizio
P.s. ma guarda che mi tocca fare alle 23:19.... venire in negozio per
potermi connettere ad internet e scaricare le news!!! Non potevo essere uno
che torna a casa e si mette a guardare la TV ?!?! :-))))


hal1961

unread,
Feb 18, 2005, 5:32:18 PM2/18/05
to
Mizio wrote:
> ....

>
>>A questo punto posso rimangiarmi la mia prima risposta data all'OP :-)
>
> .....

> Buah, ed io che mi vado pure a fidare :-))))
> ....

Gli imprevisti della vita :-PPP

[cut]


> In Progetto/Componenti ho il segnetto di spunta su Microsoft Comm Control
> 6.0
> In Progetto/Riferimenti (ti riferivi a questo, vero?) non trovo nessun
> mscomm32.ocx
> A questo punto?

E' quello che accade anche a me. Ma!

Sulla scheda con l'elenco dei riferimenti c'e' un pulsante "Browse".
Lo premi e navighi fino alla System32 e selezioni mscomm32.ocx.
Confermi e sei a posto.
Nota: io se ritorno sulla finestra dei riferimenti continuo a non
vedere selezionato mscomm, ma se controllo il file .vbp con il
blocco note vedo che e' riportato. Non so se accada a tutti o solo
a me. Sta di fatto che funziona!


> Non potevo essere uno
> che torna a casa e si mette a guardare la TV ?!?! :-))))

Per quello che c'e' da vedere... Io non ho piu' la tv da un po'
e sono soddisfatto di questa scelta.

--
ciao, hal

Roberto Cortiana

unread,
Feb 21, 2005, 2:03:40 AM2/21/05
to

"hal1961"
<hal...@abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.com
> ha scritto nel messaggio
news:Q1uRd.54386$2h5....@tornado.fastwebnet.it...


> E' quello che accade anche a me. Ma!
>
> Sulla scheda con l'elenco dei riferimenti c'e' un pulsante "Browse".
> Lo premi e navighi fino alla System32 e selezioni mscomm32.ocx.
> Confermi e sei a posto.
> Nota: io se ritorno sulla finestra dei riferimenti continuo a non
> vedere selezionato mscomm, ma se controllo il file .vbp con il
> blocco note vedo che e' riportato. Non so se accada a tutti o solo
> a me. Sta di fatto che funziona!

Anche io non vedo l'mscomm selezionato nella funestra riferimenti...
ciao, roby


Mizio

unread,
Feb 23, 2005, 2:00:09 PM2/23/05
to
Ciao,
...
> A me funziona.
...
Con il metodo suggerito da Hal (browse in riferimenti, aggiungere il
riferimento al mscomm32), anche a me.
Ora, dopo aver creato l'oggetto, riesco a lavorarci.
Pero', cosi' facendo ho perso la possibilita' di gestire l'evento
On_Comm..... o no???
Ciao... Maurizio


hal1961

unread,
Feb 23, 2005, 5:50:16 PM2/23/05
to
Mizio wrote:

> Con il metodo suggerito da Hal (browse in riferimenti, aggiungere il
> riferimento al mscomm32), anche a me.
> Ora, dopo aver creato l'oggetto, riesco a lavorarci.
> Pero', cosi' facendo ho perso la possibilita' di gestire l'evento
> On_Comm..... o no???

Non ho vb sottomano, percio' scrivo con riserva di inventario ;-)
Se dichiari la variabile con il modificatore WithEvents dovresti
riceverne gli eventi.

--
ciao, hal

Mizio

unread,
Feb 25, 2005, 8:13:14 AM2/25/05
to
...

> Non ho vb sottomano, percio' scrivo con riserva di inventario ;-)
> Se dichiari la variabile con il modificatore WithEvents dovresti
> riceverne gli eventi.
...
Ci provo a breve ed eventualmente posto i risultati.
TNX... Maurizio
0 new messages