Newsgroup: it.comp.lang.visual-basic
Titolo: classi e costruttori

Salve,
sto tentando di implementare il costruttore di una classe in vb ma non
riesco a richiamare il costruttore da un progetto esterno. La classe è
contenuta in una dll activeX, mentre il progetto esterno che utilizzo per
testare la classe è un exe standard. La classe ha un metodo Init che
inizializza tutti i suoi attributi; inoltre ho inserito in un modulo bas
(sempre all'interno della classe) una routine NewCliente, che crea un
istanza dela classe Cliente e ne richiama il metodo Init.
il codice della classe è il seguente:
Option Explicit
'Variabile o variabili locali per la memorizzazione dei valori delle
proprietà.
Private mvarCognome As String 'Copia locale.
Private mvarNome As String 'Copia locale.
Private mvarCitta As String 'Copia locale.
Private mvarCap As String 'Copia locale.
Public Sub AddDatiDb()
End Sub
Public Property Let Cap(ByVal vData As String)
'Utilizzato per l'assegnazione di un valore alla proprietà, a sinistra di
un'assegnazione.
'Syntax: X.Cap = 5
    mvarCap = vData
End Property
Public Property Get Cap() As String
'Utilizzato per recuperare il valore di una proprietà, a destra
dell'assegnazione.
'Syntax: Debug.Print X.Cap
    Cap = mvarCap
End Property
Public Property Let Citta(ByVal vData As String)
'Utilizzato per l'assegnazione di un valore alla proprietà, a sinistra di
un'assegnazione.
'Syntax: X.Citta = 5
    mvarCitta = vData
End Property
Public Property Get Citta() As String
'Utilizzato per recuperare il valore di una proprietà, a destra
dell'assegnazione.
'Syntax: Debug.Print X.Citta
    Citta = mvarCitta
End Property
Public Property Let Nome(ByVal vData As String)
'Utilizzato per l'assegnazione di un valore alla proprietà, a sinistra di
un'assegnazione.
'Syntax: X.Nome = 5
    mvarNome = vData
End Property
Public Property Get Nome() As String
'Utilizzato per recuperare il valore di una proprietà, a destra
dell'assegnazione.
'Syntax: Debug.Print X.Nome
    Nome = mvarNome
End Property
Public Property Let Cognome(ByVal vData As String)
'Utilizzato per l'assegnazione di un valore alla proprietà, a sinistra di
un'assegnazione.
'Syntax: X.Cognome = 5
    mvarCognome = vData
End Property
Public Property Get Cognome() As String
'Utilizzato per recuperare il valore di una proprietà, a destra
dell'assegnazione.
'Syntax: Debug.Print X.Cognome
    Cognome = mvarCognome
End Property
Friend Sub Init(Cognome As String, Nome As String, Citta As String, Cap As
String)
' Routine che inizializza gli attributi della classe
    Me.Cognome = Cognome
    Me.Nome = Nome
    Me.Citta = Citta
    Me.Cap = Cap
End Sub
il codice del modulo .bas :
Public Function NewCliente(Cognome As String, Nome As String, Citta As
String, Cap As String) As Cliente
' Costruttore della classe Cliente
    Set NewCliente = New Cliente
    NewCliente.Init Cognome, Nome, Citta, Cap
End Function
e questo è il codice del progetto esterno :
Option Explicit
Private Sub Command1_Click()
    Dim c As Cliente
    Set c = NewCliente("Fusari", "Sergio", "Codogno", "26845")  <--- riga
che genera l'errore
    Print c.Cognome
    Print c.Nome
    Print c.Citta
    Print c.Cap
    Set c = Nothing
End Sub
in pratica il codice client non riesce a vedere la funzione NewCliente
presente in un modulo .bas della classe Cliente.
Come si può risolvere, o aggirare, questo problema?
Grazie dell'attenzione.
ciao
Sergio

 wrote in message
news:k6w44We...@newsmst.mcis.galactica.it...


 istanza dela classe Cliente e ne richiama il metodo Init.
purtroppo le funzioni scritte in un modulo (anche se public) non hanno
visibilità all'esterno di un componente activex; l'unica soluzione consiste
nel trasformare il modulo in una classe global multiuse (instancing = 6)
che, ai fini pratici, è quasi la stessa cosa;
tieni presente che, a differenza di un modulo, una classe global multiuse
può anche essere instanziata più volte (un modulo esiste in una sola
istanza, quella del programma di appartenenza, ammesso che abbia senso
parlare di istanze di un modulo...) e potrebbe essere opportuno gestire la
cosa, nell'eventualità che sia fonte di problemi;
ciao