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


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

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.