Affecter 1 adresse connue au pointeur d'1 structure [VC++] - C++ - Programmation
Marsh Posté le 04-05-2005 à 13:55:12
les 2 processus ont chacun leur espace d'adressage de leur coté.
pour ecrire avec l'un dans l'autre, utilise OpenProcess/WriteProcessMemory/ReadProcessMemory (cf msdn)
sinon tu peux utiliser un espace mémoire partagé, comme un FileMapping par exemple (CreateFileMappping/MapViewOfFile)
Marsh Posté le 04-05-2005 à 13:55:51
L'adressage direct, c'est moyen.
En 32 bits, c'est pas terrible
Et en C++, c'est MAL.
Les l4g permettent d'éviter ces magouilles, on n'est plus en assembleur.
C'est pour ça qu'il existe moult protocoles de communication entre les applis.
Marsh Posté le 04-05-2005 à 14:43:05
blackgoddess a écrit : les 2 processus ont chacun leur espace d'adressage de leur coté. |
Merci pour l'information, mais je ne trouve pas de doc en Français!
Par hasard, ... , tu n'en n'aurais pas?
Merci tout de même
Marsh Posté le 04-05-2005 à 16:11:08
Personne d'autre n'a d'idée!
Car cela ne passe toujours pas!!!
Je ne comprend pas comment de l'interpréter compilé avec VC++ peut marché et que VC++ lui même refuse!!!
Merci de me fournir d'autre info, j'ai 4 jours pour trouver la solution, ou je passe la porte!
Marsh Posté le 05-05-2005 à 19:18:57
non je n'ai pas de doc en francais ...
Marsh Posté le 15-05-2005 à 21:59:03
socket c'est plus orienté flux/envoi de message que stockage d'informations je trouve
en tout cas c'est sur, l'ecriture dans la mémoire d'un processus ne doit pas etre la solution la plus adapté
je voterais donc mémoire partagée
Marsh Posté le 04-05-2005 à 13:49:40
Bonjour,
J'ai une application 1 qui initialise et remplit en mémoire une structure avant de lancer une application 2.
Dans l'application 2 je suis sur VC++ 6.00 et je redéfinis une structure identique à la première.
J'aimerais que cette structure pointe sur la zone mémoire de la première application, or cela ne marche pas.
Je suis dans le cadre d'une migration 16 bits en 32 bits. Or en 16 bits, cela fonctionnait.
voici mon programme.
Dans le fichier *.hpp de l'application 2:
/
Code:
// Définition de ma structure
typedef struct {
char sz...
long ...
...
} S5COMMUN;
class Ihm
{
public:
S5COMMUN * pts5;
};
Dans le fichier *.cpp de l'application 2:
Code:
int Ihm::GetSegments ()
{
CString szAd5;
long ad;
const char *chAd;
szAd5 = "811794438"; // Adresse de mémoire de la structure de l'application 1 (exemple)
if (szAd5.IsEmpty())
return 0;
// initialisation des pointeurs
chAd = (const char*)szAd5;
ad = atol (chAd);
// pts5 = (S5COMMUN _far *)ad; // Fonctionne ainsi en 16 bits
pts5 = (S5COMMUN *)ad; // Ne fonctionne pas en 32 bits!!!
return 1;
}
Merci de m'aider.