begin process at 2012 02 16 06:05:27
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

API

 > COMMUNICATION INTER PROCESS + PARTAGE MÉMOIRE

COMMUNICATION INTER PROCESS + PARTAGE MÉMOIRE


 Information sur la source

Note :
10 / 10 - par 6 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :API Source .NET ( DotNet ) Classé sous :partage, variables, Shared, communication, InterProcess Niveau :Initié Date de création :19/09/2006 Date de mise à jour :17/12/2009 12:25:56 Vu / téléchargé :5 507 / 659

Auteur : Renfield

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (45)
Ajouter un commentaire et/ou une note


 Description

Cliquez pour voir la capture en taille normale
Bonjour,

Cette petite classe permet de faire communiquer facilement diverses application, ou plusieurs instances d'une même application - Il est même possible de faire communiquer plusieurs composants au sein d'une seule et même instance.

Vous avez pour cela une zone mémoire (16 Ko par défaut) accessible depuis toutes les instances de la classe. Vous avez également la possibilité de déclencher un evenement dans toutes les instances.

Pas très clair ?

Imaginons que vous ayez codé une application
Vous lancez une première instance, votre outil charge la configuration.
Vous lancez une seconde instance.

Via une Form de la première instance, vous modifiez la configuration de votre logiciel.
ma Class InterProcess vous permet d'avertir la seconde instance que la configuration a changé

[VB6]
Vous pouvez également partager des variables à l'aide d'un dictionnaire (nom/valeur).
Il est possible de crypter ces données en mémoire, à l'aide d'un mot de passe personalisable.

Enfin, il vous est possible de récupérer le flux mémoire (crypté) codé en base64, afin de le manipuler facilement (sauvegarde dans un fichier, etc.)

La capture d'écran vous parlera peut etre plus clairement ^^


 Conclusion

La version .Net est certes basique, mais elle montre un bel exemple de Subclassing via Nativewindow

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

19 septembre 2006 15:14:00 :
Ajout du cryptage des méthodes Load et Unload
02 décembre 2009 23:53:24 :
Ajout d'un evenement indiquant une mise a jour du flux
03 décembre 2009 15:21:20 :
Il est désormais possible de lever des evènements personnalisés. La classe est desormais tournée vers une communication inter-process complète.
04 décembre 2009 14:40:07 :
Ajout d'une version .Net
04 décembre 2009 16:39:33 :
Ajout du CustomEvent en .Net. C'est vraiment simple le subclassing en .Net !
17 décembre 2009 12:25:57 :
Suite à la remarque de DarkVader, le séparateur dans le flux a été modifié pour accepter les chaines vides

 Sources du même auteur

Source avec Zip Source avec une capture ENUMERATION DES PORTS TCP ET IDENTIFCATION DU PROCESS (PID) ...
Source avec Zip Source avec une capture JSON PARSER - ANALYSE DE CHAINES JSON
Source avec Zip Source avec une capture MODULE DE TÉLÉCHARGEMENT DE FICHIER BASIQUE (SYNCHRONE / ASY...
Source avec Zip COURS DE PILOTAGE........D'APPLICATIONS
Source avec Zip CSOCKET - REMPLACEZ WINSOCK PAR LA VERSION 2 DES API

 Sources de la même categorie

Source avec Zip Source .NET (Dotnet) .NET DEPENDENCY VIEWER : ARBRE DES DÉPENDANCES D'UN ASSEMBLY... par ShareVB
Source avec Zip Source .NET (Dotnet) UTILITAIRE SKYDRIVE par MasterShadows
Source avec Zip ROTATION RAPIDE D'IMAGE par trex70
Source avec Zip Source avec une capture ENUMERATION DES PORTS TCP ET IDENTIFCATION DU PROCESS (PID) ... par Renfield
Source avec Zip Source avec une capture MOUSE SPEED AND WEIGHT : RETOUR DE FORCE VIRTUEL ! par ScSami

 Sources en rapport avec celle ci

Source avec Zip COMMUNICATION MODBUS MASTER par sergelapointe
Source avec Zip Source .NET (Dotnet) COMMUNICATION INTER PROCESSUS DLL par Ant95
Source avec Zip Source avec une capture Source .NET (Dotnet) COMMUNICATION TCP CLIENT-SERVEUR ASYNCHRONE par anadom
Source avec Zip CHAT SIMPLE V1.0 par ThePH267
Source avec Zip Source avec une capture PUBLIC SHARED SANS MODULE - VARIABLE SINGLETON : IDENTIFICAT... par PCPT

Commentaires et avis

Commentaire de bouv le 19/09/2006 08:49:06

Trop 'Class' ^^

Merci

Commentaire de MadM@tt le 19/09/2006 12:55:11

Ah ouais c'est pas mal ça, je me suis toujours demandé comment faire

Par contre tu devrais peut etre appeler la source "partage de variables..." ça serait peut etre plus clair, car la j'avais aucune idée du code sur lequel j'allait tomber quand j'ai cliqué dessus (enfin j'ai vu renfield, j'ai pas hésité ^^)

++

Commentaire de violent_ken le 19/09/2006 13:39:11

Salut, je tombe sur cette source un peu par hasard (squattage du centre IF à midi, et titre  de la source qui m'a attiré) et je n'ai pas pu encore tester (cause of Linux), mais çà semble vraiment intéressant.
Il est clair que c'est beaucoup mieux que de créer un *.txt... ;)

@+

Commentaire de eldim le 20/09/2006 08:21:47

Bonjour,

C'est vraiment génial ce truc là !!!

Bravo

Commentaire de Warning le 20/09/2006 13:33:50 administrateur CS

Un seul mot: Super ! Et aussi super bonne idée.

Commentaire de Mayzz le 20/09/2006 18:39:21

Il y a aussi sous VB les fonctions SaveSetting et GetSetting pour ceux qui ne connaissent pas mais le principe est tout autre et l'on ne peut accèder à la configuration que par le proramme l'ayant enregistrer(pas de partage) mais ca évite API, registre et fichier, sinon bravo pour ce code ! Je trouve ca très utile.

Commentaire de violent_ken le 20/09/2006 18:41:26

"mais ca évite API, registre et fichier"

Le principe de SaveSettings et GetSettings est justement d'écrire dans le registre...

@+

Commentaire de CADRATURE le 21/09/2006 13:25:43

Super

Commentaire de Renfield le 21/09/2006 13:36:49 administrateur CS

ravi que ca plaise...

Il s'agissait, dans le cas de la demande du Forum, de mémoriser le Login/Pass... et de ne pas lui demander de montrer patte blanche a chaque   instanciation du programme

Commentaire de MadM@tt le 21/09/2006 19:07:16

Ah ouais mais dans ce cas ça crée un problème de sécurité la non ?
car soit y'a moyen de récupérer le mot de passe et le login,soit il s'agit d'une variable boolean genre true : loggé, false : pas loggé, mais dans ce cas y'a surement aussi moyen de récupérer sa valeur et de la modifier ? (c'est une question lol)

Commentaire de asimengo le 21/09/2006 20:42:21

@Renfield:
'# Pour que plusieurs programmes puissent échanger ces valeurs, il suffit de modifier la clé ci dessous :
Private Const MAPKEY As String = "SharedValues"

Peux-tu être plus clair sur ton commentaire ci-dessus.

Commentaire de bouv le 21/09/2006 20:57:58

ASIMENGO>>Il faut connaitre la valeur affectée à MAPKEY pour lire les valeurs. Si tu changes pour
Private Const MAPKEY As String = "MonLogiciel"
Seul celui qui cherche avec la valeur 'MonLogiciel' pourra lire ces données.

MADM@TT>>Renfield à dernièrement ajouté une fonction de cryptage des données pour mieux sécuriser le procédé.

Commentaire de MadM@tt le 21/09/2006 23:32:03

Ahhh ok ^^

Commentaire de Renfield le 22/09/2006 03:54:34 administrateur CS

on peux même en ouvrir un autre (un autre 'MAPKEY')
en utilisant la méthode Load....

reste que quelque soit son nom, en espionnant le logiciel, les APIs utilisées, etc, on pourras toujours trouver que le logiciel ouvre un File mapping (et même en obtenir le contenu).

comme le précise bouv, en ajoutant un Password (par le biai de la propriété du même nom), les données sont cryptées dans le file Mapping.
sans ce Password lors de la lecture...

Commentaire de asimengo le 22/09/2006 10:36:57

Par rapport au commentaire de MAYZZ, les clés et valeurs sont-elles conservées même après le redémarrage du PC?
Avec savesetting les clés et valeurs sont retrouvées même après le redémarage du PC.

Le file mapping est-il physique?

Commentaire de Renfield le 22/09/2006 10:43:57 administrateur CS

non...
si toutes les instances de la classe ShareValues sont coupées, on perds les infos...

vous pouvez sauvegarder le Stream, et de le restaurer a votre guise

Commentaire de Mayzz le 22/09/2006 12:03:38

violent_ken :

je voulais dire en fait que ça évite de taper les API pour accéder au registre. c'est juste des fonctions incluses dans vb ça évite de taper trop de code  =) Dsl je me suis mal exprimé

Commentaire de violent_ken le 22/09/2006 13:14:53

MAYZZ ==> Ok ;) Mais la méthode du SaveSettings (pour des sauvegardes temporaires) est quand même assez mauvaise (ajout de clés pas forcément utiles).
@+

Commentaire de bouv le 22/09/2006 14:58:52

Il me semble qu'il y ai un petit problème.

Dans Get Stream, si je met un point d'arret sur
CopyMemory ByVal sBuffer, ByVal pMem + 8, nLength

Je me rend compte que le Buffer est quasiment enregistré en clair. Ou du moins on peut distinguer mon Login et mon Password.

Commentaire de asimengo le 22/09/2006 19:16:55

@Renfield: ça te dirais t'ajouter des fonctions d'enregistrement/restauration du Stream? en espérant que ses infos soient illisibles dans le fichier.

Commentaire de bouv le 22/09/2006 23:04:26

ASIMENGO>>L'acces au stream est public...
Public Property Get Stream() As String
Public Property Let Stream(ByRef Value As String)

Commentaire de Renfield le 02/07/2008 15:20:53 administrateur CS

version .NET :  (pas forcément optimale, hein, je tatonne ^^)
mais ca fonctionne...

Imports System.Runtime.InteropServices

Public Class SharedValues
    ' Pour que plusieurs programmes puissent échanger ces valeurs, il suffit de modifier la clé ci dessous :
    Private Const MAPKEY As String = "SharedValues"
    ' Taille du tampon (8 Ko)
    Private Const MAPSIZE = &H2000&

    Private Const SECTION_MAP_READ As Integer = &H4
    Private Const SECTION_MAP_WRITE As Integer = &H2
    Private Const FILE_MAP_READ As Integer = SECTION_MAP_READ
    Private Const FILE_MAP_WRITE As Integer = SECTION_MAP_WRITE
    Private Const INVALID_HANDLE_VALUE As Integer = &HFFFFFFFF
    Private Const PAGE_READWRITE As Integer = &H4

    Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Integer) As Integer
    Private Declare Function CreateFileMapping Lib "kernel32.dll" Alias "CreateFileMappingA" (ByVal hFile As Integer, ByVal lpFileMappingAttributes As Integer, ByVal flProtect As Integer, ByVal dwMaximumSizeHigh As Integer, ByVal dwMaximumSizeLow As Integer, ByVal lpName As String) As Integer
    Private Declare Function MapViewOfFile Lib "kernel32.dll" (ByVal hFileMappingObject As Integer, ByVal dwDesiredAccess As Integer, ByVal dwFileOffsetHigh As Integer, ByVal dwFileOffsetLow As Integer, ByVal dwNumberOfBytesToMap As Integer) As Integer
    Private Declare Function OpenFileMapping Lib "kernel32.dll" Alias "OpenFileMappingA" (ByVal dwDesiredAccess As Integer, ByVal bInheritHandle As Integer, ByVal lpName As String) As Integer
    Private Declare Function UnmapViewOfFile Lib "kernel32.dll" (ByRef lpBaseAddress As IntPtr) As Integer
    Private Declare Sub ZeroMemory Lib "kernel32.dll" Alias "RtlZeroMemory" (ByVal Destination As IntPtr, ByVal Length As Integer)

    Private mhMap As Integer
    Private msName As String
    Private mnSize As Integer

    Public ReadOnly Property Name() As String
        Get
            Name = msName
        End Get
    End Property

    Public ReadOnly Property Size() As Integer
        Get
            Size = mnSize
        End Get
    End Property

    Public Sub New()
        Load(MAPKEY, MAPSIZE)
    End Sub

    Public Sub New(ByRef vsName As String)
        Load(vsName, MAPSIZE)
    End Sub

    Public Sub New(ByVal vnSize As Integer)
        Load(MAPKEY, vnSize)
    End Sub

    ' Cette méthode permet de changer de mappage, ou de changer la taille de celui-ci...
    Public Sub New(ByRef vsName As String, ByVal vnSize As Integer)
        Load(vsName, vnSize)
    End Sub

    Private Sub Load(ByRef vsName As String, ByVal vnSize As Integer)
        Dim pMem As IntPtr
        ' Si un mappage est ouvert, on le ferme...
        If mhMap Then
            CloseHandle(mhMap)
        End If

        ' On enregistre le nom du mappage
        msName = vsName
        ' Et on tente d'ouvrir le mappage
        mhMap = OpenFileMapping(FILE_MAP_READ Or FILE_MAP_WRITE, 0, msName)
        If mhMap = 0 Then
            ' Le mappage n'existe pas ?
            ' Nous allons donc le créer. Il aura la taille demandée par l'utilisateur.
            mnSize = vnSize
            ' Création du mappage
            mhMap = CreateFileMapping(INVALID_HANDLE_VALUE, 0, PAGE_READWRITE, 0, mnSize, msName)
            If mhMap Then
                ' Le premier Integer dans le fichier sera la taille du mappage.
                ' Tout le reste est remplit par des 0
                pMem = MapViewOfFile(mhMap, FILE_MAP_WRITE, 0, 0, 0)
                If pMem Then
                    Marshal.WriteInt32(pMem, 0, mnSize)
                    ZeroMemory(New IntPtr(pMem.ToInt32 + 4), mnSize - 4)
                    UnmapViewOfFile(pMem)
                End If
            End If
        Else
            ' Le mappage existe déjà. Nous lisons la taille de celui-ci
            pMem = MapViewOfFile(mhMap, FILE_MAP_READ, 0, 0, 0)
            If pMem Then
                mnSize = Marshal.ReadInt32(pMem, 0)
                UnmapViewOfFile(pMem)
            End If
        End If
    End Sub

    Public Sub Unload()
        ' Fermeture du mappage
        If mhMap Then
            CloseHandle(mhMap)
            mhMap = 0
        End If
    End Sub

    ' Permet de récupérer une valeur en particulier du Stream.
    Public Property Value(ByVal vsName As String) As String
        Get
            Value = vbNullString
            Try
                For Each sPair As String In Stream.Split(vbNullChar)
                    If sPair.StartsWith(vsName & "=") Then
                        Value = sPair.Substring(vsName.Length + 1)
                        Exit For
                    End If
                Next sPair
            Catch e As NullReferenceException
            End Try
        End Get
        Set(ByVal value As String)
            Try
                Dim xsParts() As String = Stream.Split(vbNullChar)
                For i As Integer = 0 To xsParts.GetUpperBound(0)
                    If xsParts(i).StartsWith(vsName & "=") Then
                        ' Sinon, on modifie l'élement de notre tableau
                        xsParts(i) = vsName & "=" & value
                        ' Et on reconstruit le Stream
                        Stream = Join(xsParts, vbNullChar)
                        Exit Property
                    End If
                Next i
                Stream = Join(xsParts, vbNullChar) & vbNullChar & vsName & "=" & value
            Catch e As NullReferenceException
                Stream = vsName & "=" & value
            End Try
        End Set
    End Property

    ' Permet de récupérer le Stream enregistré dans le mapping
    Public Property Stream() As String
        Get
            Dim pMem As IntPtr

            Stream = vbNullString
            pMem = MapViewOfFile(mhMap, FILE_MAP_READ, 0, 0, 0)
            If pMem Then
                ' On récupère la taille effective des données
                Dim nLength As Integer = Marshal.ReadInt32(pMem, 4)
                If nLength > 0 Then
                    Dim xbData As Char() = New String(" ", nLength).ToCharArray
                    Marshal.Copy(New IntPtr(pMem.ToInt32 + 8), xbData, 0, nLength)
                    Stream = New String(xbData, 0, nLength)
                End If
                UnmapViewOfFile(pMem)
            End If
        End Get
        Set(ByVal value As String)
            Dim pMem As IntPtr
            pMem = MapViewOfFile(mhMap, FILE_MAP_WRITE, 0, 0, 0)
            If pMem Then
                Dim xbData As Char() = value.ToCharArray
                ' On regarde si le mapping est assez grand pour contenir les données
                If xbData.Length < mnSize Then
                    ' Tous les autres bits sont remis à 0
                    ZeroMemory(New IntPtr(pMem.ToInt32 + 8 + xbData.Length), mnSize - 8 - xbData.Length)
                    ' On ajoute la taille des données en début de mapping (après la taille du mapping)
                    Marshal.WriteInt32(pMem, 4, xbData.Length)
                    ' Et, s'il y a des données, on les ajoutes dans le mapping
                    If xbData.Length > 0 Then
                        Marshal.Copy(xbData, 0, New IntPtr(pMem.ToInt32 + 8), xbData.Length)
                    End If
                End If
                UnmapViewOfFile(pMem)
            End If
        End Set
    End Property
End Class

Commentaire de Renfield le 02/12/2009 23:57:29 administrateur CS

Je viens d'ajouter un evenement (via subclassing) qui permet de savoir quand le contenu de la mémoire partagée a changé

Commentaire de Renfield le 03/12/2009 15:23:14 administrateur CS

GROSSE mise a jour, la classe se tourne davantage vers une communication inter-process complète, avec la possibilité de propager des evènements personnalisés dans toutes les isntances de la classe

Commentaire de Renfield le 04/12/2009 14:42:23 administrateur CS

j'ai (encore) mis a jour mon code :

j'y ai inclus une version .Net certes allégée, mais plus simple a comprendre.
ici, on partage un bête flux texte (16Ko)
on a un evenement StreamChanged

pour le jeu du Dictionary fait en VB6, libre à vous de jouer a (dé)serialiser ce que vous voulez, comme vous le voulez ^^

Commentaire de bouv le 04/12/2009 16:16:33

Merci pour la version .Net je vais essayer

++

Commentaire de Renfield le 04/12/2009 16:21:37 administrateur CS

Elle est basique (simple stream)
mais le subclassing avec NativeWindow est un vrai régal !

Commentaire de bouv le 04/12/2009 16:36:17

Tu l'as dit bouffi... le subclassing en .Net est un vrai bonheur comme beaucoup d'autres choses. Si bien que je n'utilise plus du tout VB6 (même pas installé).
++

Commentaire de Renfield le 04/12/2009 16:40:38 administrateur CS

du coup j'ai ajouté en .Net le 'FireEvent'
comme ça, on communique plus efficacement entre processus ^^

Commentaire de Renfield le 04/12/2009 19:01:40 administrateur CS

a noter qu'il vaut mieux personnaliser (GUID ?) les mots en clair (passés a RegisterWindowMessage et le MAPKEY)

Commentaire de bouv le 08/12/2009 17:15:28

Salut,
J'ai une question qui peut paraître absurde mais je la pose quand même.
Admettons que je place le Stream d'un vrai fichier dans le FileMapping (celui d'un pdf par exemple).
Peut-on ensuite appeler un substitut de la fonction FileOpen sur ce FileMapping pour l'ouvrir dans le prog par défaut ?

Commentaire de DarkVader le 14/12/2009 12:26:33 10/10

Bonjour
C'est superbe Renfield - que du bonheur dans cette source,
qui en plus est distribuée sous VB6 et VB.net.

Commentaire de Renfield le 14/12/2009 14:45:41 administrateur CS

Bouv, je vois pas l'interet de ta question...
si tu as un vrai fichier, pourquoi vouloir ouvrir son filemapping ?

Commentaire de bouv le 14/12/2009 15:05:22

Dans le cadre de mon logiciel de GED.

Lors de la consultation d'une archive, aujourd'hui je dois :
- extraire le stream de la BDD
- le placer dans un fichier temporaire
- ouvrir le fichier
- surveiller sa fermeture
- supprimer le fichier du disque

Cette opération me ferait gagner un temps précieux en économisant les accès disque.

Commentaire de DarkVader le 17/12/2009 12:16:08

Il y a un os dans le potage.
Je vais regretter de t'avoir mis un 10 lol

Quid quand la valeur insérée est une chaine vide ?
J'ai contourné en remplaçant vbNullChar & vbNullChar par Chr(0) & Chr(255).

Commentaire de Renfield le 17/12/2009 12:19:57 administrateur CS

Bonne remarque, correction adaptée....

je repiques l'idée et mets a jour rapidement

Commentaire de Renfield le 17/12/2009 12:26:58 administrateur CS

Fait, cool de voir que cette source est utile à certains

Commentaire de DarkVader le 17/12/2009 12:33:29

Si beaucoup ne s'exprime en général pas ,
le nombre de téléchargement est tout de même la preuve que ta source ne laisse pas indifférent. 8)

Commentaire de bouv le 17/12/2009 13:26:22

Salut
Je me permet de relancer concernant ma question sur le OpenFileMapping
Merci d'avance
++

Commentaire de DarkVader le 28/12/2009 18:20:37

Un blem mineur dans l'actualisation des données, pour peu que plusieurs écriture/lecture de données soient alternées

ex
[code]Private WithEvents classIP As InterProcess

Private Sub Class_Initialize()
    Set classIP = New InterProcess
    
    With classIP
        printVar classIP
    
        .VarValue("Var1") = "test3"
        printVar classIP
        
        .VarValue("Var2") = "True4"
        printVar classIP
    End With
End Sub

Private Sub Class_Terminate()
    Set classIP = Nothing
End Sub


    Private Sub classIP_Changed(ByVal vnIndex As Long)
         Debug.Print " --- classIP_Changed(ByVal " & vnIndex & " As Long): " & classIP.VarName(vnIndex) & " => " & classIP.VarValue(vnIndex)
    End Sub

    Private Sub printVar(oClass As Object)
        Dim x As Long
        
        With oClass
            Debug.Print String(13, "=") & " " & .VarCount & " " & String(13, "=") & vbCrLf
            For x = 0 To .VarCount - 1
                Debug.Print x, .VarName(x), .VarValue(x)
            Next
        End With
        Debug.Print String(30, "-") & vbCrLf
    End Sub[/code]
Résultat inattendu !
Un simple doevents placé après le Postmessage HWND_BROADCAST résoud le problème. 8)

Bonnes fêtes de fin d'année.

Commentaire de Renfield le 28/12/2009 22:16:00 administrateur CS

ok.
du coup, ca allait pour partager des variables, mais le temps reel en patissait...

bon diagnostic et bonne resolution, une fois encore

Commentaire de rvs76 le 29/03/2011 15:50:22

Bonjour,

Je déterre un peu ce code en espérant qu'on me réponde.
Voila, j'ai trois applis (indépendantes) en VB.NET avec des base de données qui contiennent des données proches et/ou complémentaires. J'ai créé une quatrième appli qui contient une autre bdd avec juste les mappages des trois autres bases ainsi que plusieurs fenêtres.
J'utilise cette source légèrement modifié afin d'avoir trois noms différents de fichier virtuel et trois objet IP dans la quatrième appli.

           Appli_1
             |
             |tuyau_1
             |
           Appli_4
           /     \
   tuyau_2/       \tuyau_3
         /         \
     Appli_2      Appli_3

Chaque "tuyau" est bien isolé, mais le problème est que les évènements StreamChanged qui se mélangent dans la quatrième appli. Par exemple, si du texte est envoyé de l'appli_1 vers l'appli_4, c'est le tuyau_3 qui déclenche l'évènement StreamChanged dans l'appli_4 (dernier tuyau créé ?) mais le stream du tuyau_3 est vide.
Si quelqu'un peut m'aider...

Commentaire de rvs76 le 29/03/2011 20:06:17

je répond à moi même : il faut aussi changer le string de RegisterWindowsMessage



    Public Sub New(ByVal Nom As NomPredefini)
        Dim NomFichier As String = Nom.ToString
        meMsgStreamChanged = RegisterWindowMessage("InterProcess_StreamChanged" & Nom)
        'meMsgCustomEvent = RegisterWindowMessage("InterProcess_CustomEvent")
        'mhMap = OpenFileMapping(FILE_MAP_READ Or FILE_MAP_WRITE, 0, MAPKEY)
        mhMap = OpenFileMapping(FILE_MAP_READ Or FILE_MAP_WRITE, 0, NomFichier)

        Dim tp As CreateParams = New CreateParams()
        tp.ClassName = "STATIC"
        CreateHandle(tp)

        If mhMap = 0 Then
            ' mhMap = CreateFileMapping(INVALID_HANDLE_VALUE, 0, PAGE_READWRITE, 0, MAPSIZE, MAPKEY)
            mhMap = CreateFileMapping(INVALID_HANDLE_VALUE, 0, PAGE_READWRITE, 0, MAPSIZE, NomFichier)
            If mhMap <> 0 Then
                Dim pMem As IntPtr = MapViewOfFile(mhMap, FILE_MAP_WRITE, 0, 0, 0)
                If pMem <> IntPtr.Zero Then
                    ZeroMemory(pMem, MAPSIZE)
                    UnmapViewOfFile(pMem)
                End If
            End If
        End If
    End Sub


NomPredefini du constructeur est un enum pour nommer mes trois "tuyaux".

Commentaire de LaTatadu91 le 09/02/2012 16:14:34

Très bon code! Il me sera très utile ... une fois traduit en C++ !

Commentaire de Renfield le 09/02/2012 18:39:51 administrateur CS

code basé principalement sur APIs Windows ; la traduction devrait aller simplement.

si souci, me contacter (faudra peut etre simplifier en retirant le cryptage, par exemple)

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Partage de variable entre plusieurs applications [ par CochonPerdu ] Bonjour, Tout d'abord, je sais que cette question a plus ou moins déjà été posée mais elle est vieille (mois de Janvier) et je doute recevoir un jour Partage intempestif de variables statiques entre deux instances. [ par g_clairet_2 ] Bonjour, Je suis en stage et ça fait que 4 mois que je débute sur vb6. Je dois faire une appli qui lance une deuxième instance d'elle-même au démarr PARTAGE DE VARIABLES ENTRE INSTANCES [ par bouv ] Bonjour,Je cherche à partager des valeurs entre 2 instances d'une application en VB.Net.Si la question n'est pas très clair vous pouvez jetter un oeil Partage de variables.... [ par cyrilp ] Messieurs, mesdames,J'ai une grande question pour vous...Est-il possible de partager une variable entre plusieurs applications (VB ou pas VB d'ailleur Partage avec les api [ par LoupBlanc ] Existe t il une API capable de partager des répertoire, a l'instar de la commande net share de dos.Merci à tous. Communication modem [ par kalin ] Salut,Comment dois-je faire pour récupérer le numéro de téléphone de la personne qui m'appelle ?merci Very Mega Super URGENT !!! Partage [ par LoupBlanc ] Existe t il une dll qui permette de partager un repertoir.Merci de votre aide COMMENT CONCATENER UNE VARIABLE ? [ par Nadscript ] Salut toous le monde !je cherche à faire une concatène d'une variable pour créer des variables dynamiquement.par exemple: j'ai plusieurs variables qui envoyer des variables dans une autre form appartenant au meme projet [ par andrea06 ] Bonjour,Comme le dit le titre de mon message je voudrais envoyer la valeur de trois variables que j'ai dans une form1 dans une form2 du meme projet?co OCX Multi-instances [ par Rene ] J'ai créé un contrôle ActiveX qui utilise des Form se partageant des variables publiques d'un module.Pb dans un projet utilisant plusieurs instances d


Nos sponsors


Sondage...

Comparez les prix

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 : 5,616 sec (3)

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