Type et fonction

Le
Marc
Bonjour à tous,

je reviens vers vous, pour une question que j'ai déjà posée mais sans doute
mal expliquée .

J'ai un module class dans lequel j'ai une fonction cette fonction sert à
écrire dans un fichier.
Ce module class me sert de librairie, en gros je veut pouvoir réutiliser
cette class dans d'autres programmes.

Je fabrique des types d'enregistrement et veux les passer a cette fonction,
j'ai compris qu'il fallait utiliser byref, mais j'ai toujours un message
d'erreur je n'arrive pas à interpréter le message.

Dans le module:

Type CP
CP As String * 5
Ville As String * 50
End Type

Public FicCp As CP

Dans la class:

Public Function AddRec( ByRef RecToto As Variant) As Integer
Put #Handle,PosRec, RecToto
etc etc
End Function

Dans la form:

FicCp.CP="75000"
FicCP.Ville="Paris"

Rep=Class1.AddRec(FicCP)


Message d'erreur:
Erreur de compilation:

Seules les types définis par l'utilisateur et qui sont définis dans les
modules d'objets publics peuvent être convertis depuis un variant, ou passés
à des fonctions à liaison tardive

Je ne veux pas utiliser de solution du style:

Dans la class:

Public Function AddRec( Byval NumType As Integer) As Integer
Select NumType
Case 1
put #Handle,PosRec, FicCP
Case 2
etc etc .
End Function

Par avance merci de vos précieux renseignements.

Marc
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Marc
Le #20824361
Dans la doc de VB5 en page 365 il y a une note qui dit: Si vous voulez
transférer un type personnalisé vers un module de feuille ou de classe, la
procédure doit être privée.

J'ai beau faire pleins de tests , j'ai toujours le même message.

Personne n'a d'idée ?



Bonjour à tous,

je reviens vers vous, pour une question que j'ai déjà posée mais sans
doute mal expliquée .

J'ai un module class dans lequel j'ai une fonction cette fonction sert à
écrire dans un fichier.
Ce module class me sert de librairie, en gros je veut pouvoir réutiliser
cette class dans d'autres programmes.

Je fabrique des types d'enregistrement et veux les passer a cette
fonction, j'ai compris qu'il fallait utiliser byref, mais j'ai toujours un
message d'erreur je n'arrive pas à interpréter le message.

Dans le module:

Type CP
CP As String * 5
Ville As String * 50
End Type

Public FicCp As CP

Dans la class:

Public Function AddRec( ByRef RecToto As Variant) As Integer
Put #Handle,PosRec, RecToto
etc etc ...
End Function

Dans la form:

FicCp.CP="75000"
FicCP.Ville="Paris"

Rep=Class1.AddRec(FicCP)


Message d'erreur:
Erreur de compilation:

Seules les types définis par l'utilisateur et qui sont définis dans les
modules d'objets publics peuvent être convertis depuis un variant, ou
passés à des fonctions à liaison tardive

Je ne veux pas utiliser de solution du style:

Dans la class:

Public Function AddRec( Byval NumType As Integer) As Integer
Select NumType
Case 1
put #Handle,PosRec, FicCP
Case 2
etc etc ....
End Function

Par avance merci de vos précieux renseignements.

Marc



parci
Le #20824351
Marc a écrit :
Bonjour à tous,

je reviens vers vous, pour une question que j'ai déjà posée mais sans doute
mal expliquée .

J'ai un module class dans lequel j'ai une fonction cette fonction sert à
écrire dans un fichier.
Ce module class me sert de librairie, en gros je veut pouvoir réutiliser
cette class dans d'autres programmes.

Je fabrique des types d'enregistrement et veux les passer a cette fonction,
j'ai compris qu'il fallait utiliser byref, mais j'ai toujours un message
d'erreur je n'arrive pas à interpréter le message.

Dans le module:

Type CP
CP As String * 5
Ville As String * 50
End Type

Public FicCp As CP

Dans la class:

Public Function AddRec( ByRef RecToto As Variant) As Integer
Put #Handle,PosRec, RecToto
etc etc ...
End Function

Dans la form:

FicCp.CP="75000"
FicCP.Ville="Paris"

Rep=Class1.AddRec(FicCP)


Message d'erreur:
Erreur de compilation:

Seules les types définis par l'utilisateur et qui sont définis dans les
modules d'objets publics peuvent être convertis depuis un variant, ou passés
à des fonctions à liaison tardive



C'est interdit.

2 solutions possibles :
- convertir ton type en classe et la passer en paramètre de ta fonction
AddRec. Ca revient à définir une classe CP avec 2 propriétés en écriture
et à créer une instance de cette classe dans le form.

- passer un pointeur sur ton type en paramètre et retrouver les données
à partir du pointeur dans ta fonction.

La première solution est de loin à privilégier.
Marc
Le #20824591
Merci pour ta réponse.

as tu un petit exemple pour la première manip car là je nage un peu.

En revanche le pointeur pourrait faire l'affaire
- www.gelase.org
"parci" 4b32097b$0$30352$
Marc a écrit :
Bonjour à tous,

je reviens vers vous, pour une question que j'ai déjà posée mais sans
doute mal expliquée .

J'ai un module class dans lequel j'ai une fonction cette fonction sert à
écrire dans un fichier.
Ce module class me sert de librairie, en gros je veut pouvoir réutiliser
cette class dans d'autres programmes.

Je fabrique des types d'enregistrement et veux les passer a cette
fonction, j'ai compris qu'il fallait utiliser byref, mais j'ai toujours
un message d'erreur je n'arrive pas à interpréter le message.

Dans le module:

Type CP
CP As String * 5
Ville As String * 50
End Type

Public FicCp As CP

Dans la class:

Public Function AddRec( ByRef RecToto As Variant) As Integer
Put #Handle,PosRec, RecToto
etc etc ...
End Function

Dans la form:

FicCp.CP="75000"
FicCP.Ville="Paris"

Rep=Class1.AddRec(FicCP)


Message d'erreur:
Erreur de compilation:

Seules les types définis par l'utilisateur et qui sont définis dans les
modules d'objets publics peuvent être convertis depuis un variant, ou
passés à des fonctions à liaison tardive



C'est interdit.

2 solutions possibles :
- convertir ton type en classe et la passer en paramètre de ta fonction
AddRec. Ca revient à définir une classe CP avec 2 propriétés en écriture
et à créer une instance de cette classe dans le form.

- passer un pointeur sur ton type en paramètre et retrouver les données à
partir du pointeur dans ta fonction.

La première solution est de loin à privilégier.


Marc
Le #20824581
Après réflexion je me dis que dans un prog on peut faire plusieurs recordset
sur un même fichier, donc dans ce cas le pointeur serait peut être plus
adapté.

Je ne voudrais pas abuser, aurais tu 1 exemple concret pour les deux

- www.gelase.org
"parci" 4b32097b$0$30352$
Marc a écrit :
Bonjour à tous,

je reviens vers vous, pour une question que j'ai déjà posée mais sans
doute mal expliquée .

J'ai un module class dans lequel j'ai une fonction cette fonction sert à
écrire dans un fichier.
Ce module class me sert de librairie, en gros je veut pouvoir réutiliser
cette class dans d'autres programmes.

Je fabrique des types d'enregistrement et veux les passer a cette
fonction, j'ai compris qu'il fallait utiliser byref, mais j'ai toujours
un message d'erreur je n'arrive pas à interpréter le message.

Dans le module:

Type CP
CP As String * 5
Ville As String * 50
End Type

Public FicCp As CP

Dans la class:

Public Function AddRec( ByRef RecToto As Variant) As Integer
Put #Handle,PosRec, RecToto
etc etc ...
End Function

Dans la form:

FicCp.CP="75000"
FicCP.Ville="Paris"

Rep=Class1.AddRec(FicCP)


Message d'erreur:
Erreur de compilation:

Seules les types définis par l'utilisateur et qui sont définis dans les
modules d'objets publics peuvent être convertis depuis un variant, ou
passés à des fonctions à liaison tardive



C'est interdit.

2 solutions possibles :
- convertir ton type en classe et la passer en paramètre de ta fonction
AddRec. Ca revient à définir une classe CP avec 2 propriétés en écriture
et à créer une instance de cette classe dans le form.

- passer un pointeur sur ton type en paramètre et retrouver les données à
partir du pointeur dans ta fonction.

La première solution est de loin à privilégier.


parci
Le #20824931
Marc a écrit :
Après réflexion je me dis que dans un prog on peut faire plusieurs recordset
sur un même fichier, donc dans ce cas le pointeur serait peut être plus
adapté.



Non.

Je ne voudrais pas abuser, aurais tu 1 exemple concret pour les deux



classe c2 :

Private m_cp As String
Private m_ville As String

Public Property Let cp(newvalue As String)
m_cp = newvalue
End Property
Public Property Get cp() As String
cp = m_cp
End Property

Public Property Let Ville(newvalue As String)
m_ville = newvalue
End Property
Public Property Get Ville() As String
Ville = m_ville
End Property


classe c1 :

Private Type udtCp
cp As String * 5
Ville As String * 50
End Type

Public Function AddRec(c As c1) As Integer
Dim t As udtCp

With t
.cp = c.cp
.Ville = c.Ville
End With

Put #Handle, PosRec, t
End Function

form :

Private Sub Form_Load()

Dim c2 As New c2
Dim c1 As New c1

With c2
.cp = "75000"
.Ville = "Paris"
End With

c1.AddRec cp

End Sub
Marc
Le #20825051
Ok,

je te remercie beaucoup je vais faire le test dèja pour comprendre ce que
tu a fais et te tiens au courrant

Marc a écrit :
Après réflexion je me dis que dans un prog on peut faire plusieurs
recordset sur un même fichier, donc dans ce cas le pointeur serait peut
être plus adapté.



Non.

Je ne voudrais pas abuser, aurais tu 1 exemple concret pour les deux



classe c2 :

Private m_cp As String
Private m_ville As String

Public Property Let cp(newvalue As String)
m_cp = newvalue
End Property
Public Property Get cp() As String
cp = m_cp
End Property

Public Property Let Ville(newvalue As String)
m_ville = newvalue
End Property
Public Property Get Ville() As String
Ville = m_ville
End Property


classe c1 :

Private Type udtCp
cp As String * 5
Ville As String * 50
End Type

Public Function AddRec(c As c1) As Integer
Dim t As udtCp

With t
.cp = c.cp
.Ville = c.Ville
End With

Put #Handle, PosRec, t
End Function

form :

Private Sub Form_Load()

Dim c2 As New c2
Dim c1 As New c1

With c2
.cp = "75000"
.Ville = "Paris"
End With

c1.AddRec cp

End Sub


Driss HANIB
Le #20825111
Salut Marc

voici ma solution

Dans ta class tu mets

Friend Function AddRec( ByRef RecToto As CP) As Integer
Put #Handle,PosRec, RecToto
etc etc ...
End Function

je ne sais pas pourquoi mais les type définis par l'utilisateur ne peuvent
être pris en compte que si on fait précéder sub ou function par le mot
friend...
De plus mets carrément ton type CP (ByRef RecToto As CP) dans tes
paramètres.

Driss

"Marc"
Ok,

je te remercie beaucoup je vais faire le test dèja pour comprendre ce que
tu a fais et te tiens au courrant

Marc a écrit :
Après réflexion je me dis que dans un prog on peut faire plusieurs
recordset sur un même fichier, donc dans ce cas le pointeur serait peut
être plus adapté.



Non.

Je ne voudrais pas abuser, aurais tu 1 exemple concret pour les deux



classe c2 :

Private m_cp As String
Private m_ville As String

Public Property Let cp(newvalue As String)
m_cp = newvalue
End Property
Public Property Get cp() As String
cp = m_cp
End Property

Public Property Let Ville(newvalue As String)
m_ville = newvalue
End Property
Public Property Get Ville() As String
Ville = m_ville
End Property


classe c1 :

Private Type udtCp
cp As String * 5
Ville As String * 50
End Type

Public Function AddRec(c As c1) As Integer
Dim t As udtCp

With t
.cp = c.cp
.Ville = c.Ville
End With

Put #Handle, PosRec, t
End Function

form :

Private Sub Form_Load()

Dim c2 As New c2
Dim c1 As New c1

With c2
.cp = "75000"
.Ville = "Paris"
End With

c1.AddRec cp

End Sub






Marc
Le #20825211
Merci driss,

Je test aussi et vous dis ce que cela donne.

Salut Marc

voici ma solution

Dans ta class tu mets

Friend Function AddRec( ByRef RecToto As CP) As Integer
Put #Handle,PosRec, RecToto
etc etc ...
End Function

je ne sais pas pourquoi mais les type définis par l'utilisateur ne peuvent
être pris en compte que si on fait précéder sub ou function par le mot
friend...
De plus mets carrément ton type CP (ByRef RecToto As CP) dans tes
paramètres.

Driss

"Marc"
Ok,

je te remercie beaucoup je vais faire le test dèja pour comprendre ce que
tu a fais et te tiens au courrant

Marc a écrit :
Après réflexion je me dis que dans un prog on peut faire plusieurs
recordset sur un même fichier, donc dans ce cas le pointeur serait peut
être plus adapté.



Non.

Je ne voudrais pas abuser, aurais tu 1 exemple concret pour les deux



classe c2 :

Private m_cp As String
Private m_ville As String

Public Property Let cp(newvalue As String)
m_cp = newvalue
End Property
Public Property Get cp() As String
cp = m_cp
End Property

Public Property Let Ville(newvalue As String)
m_ville = newvalue
End Property
Public Property Get Ville() As String
Ville = m_ville
End Property


classe c1 :

Private Type udtCp
cp As String * 5
Ville As String * 50
End Type

Public Function AddRec(c As c1) As Integer
Dim t As udtCp

With t
.cp = c.cp
.Ville = c.Ville
End With

Put #Handle, PosRec, t
End Function

form :

Private Sub Form_Load()

Dim c2 As New c2
Dim c1 As New c1

With c2
.cp = "75000"
.Ville = "Paris"
End With

c1.AddRec cp

End Sub










Publicité
Poster une réponse
Anonyme