Public shared sans module - variable singleton : identification d'instance d'objets

Soyez le premier à donner votre avis sur cette source.

Vue 3 969 fois - Téléchargée 295 fois


Description

un nom un peu barbare pour dire en fait : utiliser une variable entre différentes instances d'un objet

lorsque votre projet (form par exemple) utilise plusieurs instances d'une class ou d'un usercontrol, comment cet objet peut-il savoir laquelle de ces instances il représente?

c'est ici le but de cette source, un identifiant "unique" incrémentable, décrémentable, partagé entre un ou plusieurs modèles

le code est à copier directement dans votre objet

explications plus détaillées fournies avec le projet, code abondamment commenté

vous pouvez adapter le code sans trop de difficultés

Source / Exemple :


Private Function ReadMappingValue(ByVal hFileMappingObject As Long, ByRef lValue As Long) As Boolean
    If hFileMappingObject = 0 Then
'       mauvais param, renvoyé par le précédent CreateFileMapping
        Debug.Print "Erreur lors du CreateFileMapping"
    Else
        Dim lMVF As Long
        lMVF = MapViewOfFile(hFileMappingObject, FILE_MAP_READ, 0&, 0&, 0&)
        If lMVF = 0 Then
            Debug.Print "Erreur lors du MapViewOfFile"
        Else
'           lecture de la valeur
            Call CopyMemory(lValue, ByVal lMVF, 4&)
            
'           fermeture de la vue
            Call UnmapViewOfFile(lMVF)
            ReadMappingValue = True
        End If
    End If
End Function

Private Function WriteMappingValue(ByVal hFileMappingObject As Long, ByRef lValue As Long) As Boolean
    If hFileMappingObject = 0 Then
'       mauvais param, renvoyé par le précédent CreateFileMapping
        Debug.Print "Erreur lors du CreateFileMapping"
    Else
        Dim lMVF As Long
        lMVF = MapViewOfFile(hFileMappingObject, FILE_MAP_WRITE, 0&, 0&, 0&)
        If lMVF = 0 Then
'           erreur
            Debug.Print "Erreur lors du MapViewOfFile"
        Else
'           écriture de la valeur
            Call CopyMemory(ByVal lMVF, lValue, 4&)

'           fermeture de la vue
            Call UnmapViewOfFile(lMVF)
            WriteMappingValue = True
        End If
    End If
End Function

Conclusion :


merci à Renfield pour sa source PrevInstance qui m'a permis de comprendre le filemapping

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
79
@Nicolas : Il n'y a pas de .sln dans un projet VB6
Tu peux tenter d'ouvrir le .vbp sous .Net qui tentera de faire un upgrade
Messages postés
51
Date d'inscription
mercredi 24 juin 2009
Statut
Membre
Dernière intervention
23 avril 2010

Il est ou le .sln ?
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
46
merci pour ton comm et ta note Jack ;)
content que çà te plaise et te serve

pour ton "détail", c'est normal (le dernier objet décrémentant ferme le mapping, c'est le but :p). le "1" n'a pas besoin de savoir qu/s'il y en a eu d'autres avant lui, tant qu'il est bien unique. à moins que j'ai mal compris ta remarque

bon dev ;)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
79
Un petit détail qui a son importance :
La variable commune gérée ici perd sa valeur une fois que les objets qui lui faisait référence ont tous disparus.
En d'autre terme, cette variable ne vit que si au moins un objet y est rattaché.
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
79
Voilà, je n'ai pas résisté longtemps pour mettre en application : http://www.vbfrance.com//code.aspx?ID=50355
Merci PCPT
Cette solution est quand même plus 'pro'
Afficher les 6 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.