Partage de variable entre plusieur programmes (filemapping)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 300 fois - Téléchargée 33 fois

Contenu du snippet

Ce code est seulement un petit exemple de partage d'une variable entre plusieur programme sous windows.

pour les tester il suffit d'en lancer plusieur et de taper un mot ou un nombre pour le mettre dans la variable partagée, PRINT ou 0 pour afficher cette dernière et EXIT ou 0 pour sortir.

Source / Exemple :


//////////////////////////////////////////////////////////////////////////////
// Premier exemple avec un partage d'une chaine de caractère
//////////////////////////////////////////////////////////////////////////////
#include <stdio.h>
#include <string.h>
#include <windows.h> // à ajouter pour l'utilisation

int main()
{
	//Creation d'un fichier MAP (nommé "filemap" dans cet exemple)
	HANDLE hFileMap = CreateFileMapping(INVALID_HANDLE_VALUE,0,PAGE_READWRITE,0,0x4000,"filemap");
	// et initialisation d'une variable partagée
	char* mData = (char*)MapViewOfFile(hFileMap,FILE_MAP_ALL_ACCESS,0,0,0);
	//initialise la variable au départ
	strcpy(mData,"NO_DATA");

	while (true)
	{
		char txt[0xFF];
		scanf("%s",&txt);

		if (strcmp(txt,"PRINT") == 0) // Si je tape PRINT: affiche la variable partagée
			printf("mData: %s\n",mData); 
		else if(strcmp(txt,"EXIT") == 0) // Si EXIT: quitte la boucle infinie
			break;
		else // sinon enregistre ce qu'on a tapé dans la variable partagée
			strcpy(mData,txt);
	}
	// Libère la mémoire et quitte le programme
	UnmapViewOfFile(mData);
	CloseHandle(hFileMap);

	return 0;
}

//////////////////////////////////////////////////////////////////////////////
// Second exemple avec un partage d'un nombre de type 'int'
//////////////////////////////////////////////////////////////////////////////
#include <stdio.h>
#include <string.h>
#include <windows.h>

int main()
{
	HANDLE hFileMap = CreateFileMapping(INVALID_HANDLE_VALUE,0,PAGE_READWRITE,0,0x4000,"filemap");
	int* mData = (int*)MapViewOfFile(hFileMap,FILE_MAP_ALL_ACCESS,0,0,0);

  • mData = 4;
while (true) { int txt; scanf("%d",&txt); if (txt == 0) printf("mData: %d\n",*mData); else if (txt == 1) break; else
  • mData = txt;
} UnmapViewOfFile(mData); CloseHandle(hFileMap); return 0; }

Conclusion :


Voici un code que l'on ma demandé donc donnez m'en des nouvelles pour me dire s'il répond à vos attentes. (Toutes critiques et note seront les bien venues)

Merci.

Bub325

A voir également

Ajouter un commentaire

Commentaires

Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
1
Plus haut il est mis que ça a été testé entre C et Java , Java n'étant pas du code bas niveau tu as ta réponse. Pour ce qui est du scripting, je ne saurais dire. Mais à mon humble avis non.
Messages postés
1
Date d'inscription
vendredi 18 février 2011
Statut
Membre
Dernière intervention
10 mai 2011

Bonjour,
En effet cette technique fonctionne bien entre deux applications C++
Mais y'a t'il moyen de récupérer ce filemap par un script? ou est-ce strictement limité au C et codes bas niveau
Messages postés
12
Date d'inscription
mardi 6 avril 2010
Statut
Membre
Dernière intervention
12 avril 2010

hmmm je crois qu il y a un bug
pour le 2 eme process c pas plutot un OPENFILEMAPPING ?
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
1
A ton avis JJMASTER ?

struct tastruct* mData = (struct tastruct*)MapViewOfFile(hFileMap,FILE_MAP_ALL_ACCESS,0,0,0);

Me parait une bonne solution non? tt simple.
Messages postés
51
Date d'inscription
mardi 28 janvier 2003
Statut
Membre
Dernière intervention
29 septembre 2010
1
Merci beaucoup, Tout a fait ce que je cherchais.
Encore merci et bonne continuation
Afficher les 14 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.