begin process at 2012 02 13 22:40:37
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Visual Basic 6

 > 

Windows

 > 

ActiveX / COM

 > 

Liaison Module de classe pour DLL


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Liaison Module de classe pour DLL

lundi 13 août 2007 à 17:38:38 | Liaison Module de classe pour DLL

drouault

Bonjour,

J'ai un souci que je n'arrive pas à résoudre mais qui doit pourtant être assez simple. Je débute dans la programmation avec les modules de classes et je souhaite pouvoir utiliser une collection.

J'ai donc créer mon type dans un module de classe :

Private strrefdoc As String
Private strlink As String
Private strlibelle As String
Private strctype As String
Property Let refdoc(ByVal data As String)
    strrefdoc = data
End Property
Property Let link(ByVal data As String)
    strlink = data
End Property
Property Let libelle(ByVal data As String)
    strlibelle = data
End Property
Property Let letype(ByVal data As String)
    strctype = data
End Property
Property Get refdoc() As String
    refdoc = strrefdoc
End Property
Property Get link() As String
    link = strlink
End Property
Property Get libelle() As String
    libelle = strlibelle
End Property
Property Get letype() As String
    letype = strctype
End Property

Dans un autre module de classe, j'ai mis le code qui permet d'ajouter, de supprimer ou d'accéder à un item de la collection :

Private macoll As Collection
'innitialisation
Private Sub class_initialize()
    Set macoll = New Collection
End Sub
'méthode add
Public Function add(ByVal refdoc As String, ByVal link As String, ByVal libelle As String, ByVal letype As String)
    Dim myObj As New Type_gcou
    '--------------------
    myObj.refdoc = refdoc
    myObj.link = link
    myObj.libelle = libelle
    myObj.letype = letype
    '--------------------
    macoll.add myObj
    Set add = myObj
    Set myObj = Nothing
    '--------------------
End Function
'méthode remove
Public Sub remove(vntIndexKey As Variant)
    macoll.remove vntIndexKey
End Sub
'propriété item
Public Property Get item(vntIndexKey As Variant) As Type_gcou
    Set item = macoll(vntIndexKey)
End Property
'propriété count
Public Property Get count() As Long
    count = macoll.count
End Property
'fin
'destruction de la collection
Private Sub class_terminate()
    Set macoll = Nothing
End Sub

Ce que je souhaite, c'est pouvoir ensuite accéder aux informations de ma collection à partir d'une propriété de mon module de classe principale, et c'est là que je bloque. Et la je n'arrive pas à accéder à mes différents Item, je pense que j'ai un souci dans ma déclaration des ces deux modules de classe dans mon module de classe principale.

J'ai essayé avec ça mais ça ne fonctionne pas :
Public Property Set Type_Courrier(ByVal type_cou As Type_gcou)
    If type_cou Is Nothing Then
        Set type_cou = New Type_gcou
    End If
   
    'Dans un cas comme dans l'autre l'objet est valide donc
    Set Mes_Courriers = type_cou
   
End Property

Public Property Set Mes_Courriers(ByVal mescourriers As Coll_cou)

    If mescouriers Is Nothing Then      'Si la collection n'existe pas
        Err.Raise vbObjectError + 2, "mescouriers", "Il faut lire le fichier avant de consulter la collection"
    Else
        Set Mes_Courriers = mescouriers    'on donne acces à la collection
    End If
  
End Property

Si quelqu'un voit une solution ou peut m'orienter vers une source bien expliquée ...

En espérant avoir été à peu prés clair (j'en suis pas sur :-))

Merci d'avance

Pierre

lundi 13 août 2007 à 18:43:14 | Re : Liaison Module de classe pour DLL

mortalino

Membre Club


salut,

je t'ai mis deux commentaires dans la première partie, la seconde c'est ce que je te propose, je fais un peu différemment, pas sûr que ce soit la meilleure méthode, mais bon :


Option Explicit

Private macoll As Collection
'innitialisation
Private Sub class_initialize()
    Set macoll = New Collection
End Sub
'méthode add

' ****  Pas function, mais Sub : ****
Public Sub add(ByVal refdoc As StringByVal link As String, ByVal libelle As String, ByVal letype As String)
    Dim myObj As New Type_gcou
    '--------------------
    myObj.refdoc = refdoc
    myObj.link = link
    myObj.libelle = libelle
    myObj.letype = letype
    '--------------------
    macoll.add myObj
    
    ' **** inutile : ****
    'Set add = myObj
    
    Set myObj = Nothing
    '--------------------
End Sub
'méthode remove
Public Sub remove(vntIndexKey As Variant)
    macoll.remove vntIndexKey
End Sub

'propriété count
Public Property Get count() As Long
    count = macoll.count
End Property
'fin
'destruction de la collection
Private Sub class_terminate()
    Set macoll = Nothing
End Sub


'=================================================================================


'propriété item

'*** moi je fais différement :
'Public Property Get item(vntIndexKey As Variant) As Type_gcou
'    Set item = macoll.item(vntIndexKey)
'End Property

' Comme ceci :

Public Sub Item(ByRef oObject As Type_gcou, ByVal lID As Long)
    Set oObject = macoll.Item(lID)
End Sub



' et pour l'utiliser :
' t'as une classe qui s'appelle Type_gcou, l'autre, _
ne la connaissant pas je vais l'appeler MyColObj :

    Dim TEMP_Type_gcou As New Type_gcou, MyColObj As New MyColObj
    Dim As Long

For i = To MyColObj.count
    Call MyColObj.lngItem(TEMP_Type_gcou, i)
    
    MsgBox TEMP_Type_gcou.refdoc
    MsgBox TEMP_Type_gcou.link
    MsgBox TEMP_Type_gcou.libelle
    MsgBox TEMP_Type_gcou.letype
    
    Set TEMP_Type_gcou = Nothing
Next i

~ Mortalino ~ Colorisation automatique

@++


( Nouveau forum : Exclusivement Office & VBA
lundi 13 août 2007 à 18:44:35 | Re : Liaison Module de classe pour DLL

mortalino

Membre Club


remplace
    Call MyColObj.lngItem(TEMP_Type_gcou, i)
par
    Call MyColObj.Item(TEMP_Type_gcou, i)

@++


( Nouveau forum : Exclusivement Office & VBA
mardi 14 août 2007 à 08:39:41 | Re : Liaison Module de classe pour DLL

drouault

Merci beaucoup de ton aide ...

J'ai modifier un peu le code suivant tes exemples et si ça te dérange pas j'aurais quelques questions à te poser vu que ça ne fonctionne
pas trés bien encore :-) :

-> J'ai un souci avec mon count, j'ai mis un msgbox dans ma dll qui me renvoie le bon nombre d'enregistrements de la table,  et quand j'appelle ensuite ma propriété Count dans un projet (comme avec ta méthode), il me renvoit zéro ... Je pense que j'ai du faire une boulette en laissant trainer un nothing quelque part peut être ?! Du coup, j'accéde pas à l'item, même si maintenant, grâce à ta méthode, je pense que ça va fonctionner car j'ai la saisie assistée que j'avais pas avant ...

-> Est'il possible de ne déclarer qu'un seul objet dans la dll pour accéder à tous les autres. Dans mon exemple :

gcourriers : module de classe "principale"
coll_cou : module de classe avec Add, Remove, Item
type_gcou : module de classe avec mon type

Est 'il possible d'arriver à ça dans l'application, au travers d'une propriété que je déclarerais dans le module de classe gcourriers et qui ferait référence aux autres modules de classe (gcour par exemple pour le nom de la propriété) :

Dim toto as New gcourriers
Dim unevaleurcollection as string

unevaleurcollection = toto.gcour.item(i).letype

Ce n'est peut être pas possible ...

Merci déjà pour les réponses apportées ...

A+

Pierre



Cette discussion est classée dans : set, string, type, classe, myobj


Répondre à ce message

Sujets en rapport avec ce message

Récursivité... Classe auto-référenciable [ par MarcoBrunelle ] Je devais simuler un arbre à l'aide de Type personnalisé, il s'avère qu'en VB, un type de ne pas avoir comme propriété, un objet de ce même type.Ex.:' Type de base, type "user" et reflection [ par bigflo93 ] Salut à tous :) Je suis en plein reflection en ce moment et je rencontre un problème concernant la classe Type. En effet, je cherche à instancier une Type, string et reflection [ par bigflo93 ] Salut à tous :) Je suis en pleine reflection en ce moment :) et je cherche à instancier une classe à partir d'une string. Enfin, plus précisement avo Type, string et reflection [ par bigflo93 ] Salut à tous :) Je suis en pleine reflection en ce moment :) et je cherche à instancier une classe à partir d'une string. Enfin, plus précisement Convertion de string en decimal [ par tiwolfette ] Bonjour à tous,Je stocke dans un tableau de type string une grande quantité d'info et notamment des chiffres a virgules. Chiffres dont je dois me serv Trie tableau dynamique avec type [ par pcpunch ] Slt j'ai un tableau "ARTICLE" dynamique avec un type :Type ArticleVCode As StringNom As StringFamille As StringTVA As StringTTC As StringEnd TypePubl pb avec des connections dans une classe [ par stipe ] bonjour,j'ai créé un usercontrol qui contient une datacombo (DtcKeyboard)+ un ADO (ADOKeyboard)dans ma classe, j'ai le code suivant : Public Property type Utilisateur [ par keopsk ] Bonjour,Y-a-il un moyen pour lire le nom et le type des différents élements d'un type utilisateur.Par exemple:Type mon_type element1 As String e Access 2000, Problème d'Incompatibilité de type alors que je n'ai que des Strings [ par dannywilde ] J'ai écrit une macro qui dès que l'on saisie le nom et le prénom, la macro rempli tout les champs du formulaires.Le problème c'est que j'ai un soucis problème de casting [ par jesusonline ] j'ai un problème de casting. j'ai un control qui est définit en tant que control simple dim c as control j'ai une string qui contient le type de ce co


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,468 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales