[VC++] Affecter 1 adresse connue au pointeur d'1 structure

Affecter 1 adresse connue au pointeur d'1 structure [VC++] - C++ - Programmation

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.

Reply

Marsh Posté le 04-05-2005 à 13:49:40   

Reply

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)


---------------
-( BlackGoddess )-
Reply

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.


Message édité par Friday Monday le 04-05-2005 à 14:01:05
Reply

Marsh Posté le 04-05-2005 à 14:43:05    

blackgoddess a écrit :

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)


 
 
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

Reply

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!

Reply

Marsh Posté le 05-05-2005 à 19:18:57    

non je n'ai pas de doc en francais ...


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 15-05-2005 à 18:53:12    

+1 pour mémoire partagée ou socket

Reply

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


---------------
-( BlackGoddess )-
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed