2009-09-14 4 views
1

J'ai une structure et un membre est char * * (pointeur 2d). J'allouer l'espace de EXE1 et appelez EXE2 avec les données. J'utilise memcpy pour obtenir toutes les données sur EXE2. L'adresse mémoire sur les deux EXE est la même (disons 0x013740b0), bien que les données de char ** sur EXE2 ne sont pas présentes. Comment puis-je récupérer les données sur EXE2?Données entre exécutables (ANSI C, MFC 4.1)

Merci à l'avance, crème solaire

Répondre

6

Vous ne pouvez pas partager des pointeurs comme ça que chaque exe est d'avoir son propre espace d'adressage virtuel et quelle que soit l'adresse que vous voyez est pas une adresse physique, il est adresse virtuelle. Cette adresse virtuelle sera traduite en différentes adresses physiques dans différents exes. Vous pouvez utiliser shared memory pour partager les données entre différents processus.

0

Je pense que vous ne pouvez pas se référer à anoher adresse mémoire dans un autre exécutable directement, si vous voulez que ce comportement que vous devez faire dll partagé et de mettre votre structure dans un endroit Partagée

+0

qui ne fonctionnera pas non plus comme dans une application chaque DLL possède également son propre espace d'adressage. – jdehaan

+0

oui, mais vous pouvez déclarer la section globale !!! –

+0

C'est un hack assez sale. Contrairement à la mémoire partagée appropriée, les sections de données partagées DLL contournent le modèle de sécurité NT. – MSalters

1

Naveen est correcte.

Vous pouvez essayer quelque chose comme ceci:

HGLOBAL hglbBuf = GlobalAlloc(GMEM_MOVEABLE, buffer_size); 
    if ( hglbBuf == NULL ) { 
    // ... 
    return; 
    } 

    /* do something with the buffer */ 
    void* buf = (void*)GlobalLock(hglbBuf); 
    // ... 
    GlobalUnlock(hglbBuf); 
+0

Non - GLobalAlloc est global pour le processus (La différence avec LocalAlloc est devenue théorique après le changement Win16-> Win32). EXE2 a ses propres adresses "globales" distinctes. --- Aussi, vous n'avez pas besoin de GlobalLock dans Win32 – MSalters

+0

@ MSalters, je ne pense pas. Par exemple, les exemples MSDN utilisent GlobalAlloc pour transmettre les données du Presse-papiers. –

Questions connexes