[VC++] AFFECTER 1 ADRESSE CONNUE AU POINTEUR

cm_felix -  
 cm_felix -
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:

// Définition de ma structure
typedef struct {
char sz...
long ...
...
} S5COMMUN;

class Ihm
{
public:
S5COMMUN * pts5;
};


Dans le fichier *.cpp de l'application 2:

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.
A voir également:

2 réponses

Luffy =) Messages postés 365 Date d'inscription   Statut Membre Dernière intervention   110
 
ben c normal, t'as pas le doit de pointer comme ça quand tu veux sur l'adresse réservée par une autre appli, sinon ça s'appelerait un virus ou qq chose comme ça nan ?
0
cm_felix
 
Bonjour Luffy,

je te remercie pour ta réponse, mais elle est incorrecte, je m'explique:

Mon application 1 est développé en NSDK (NatSystem) et compiler avec le même compilateur. Et cela fonctionne très bien.
0
Luffy =) Messages postés 365 Date d'inscription   Statut Membre Dernière intervention   110
 
ah désolé, je ne connaissais pas cet outil.

J'ai été voir vite fait sur le net, et ça a l'air bien puissant en effet, mais ça a l'air d'être de l'interprété non ? car ils disent que le programme est totalement indépendant du système d'exploitation utilisé.
(http://www.natsystem.fr/NATSYSTEM/isafcgi.dll/advfr/home.entree?ID=43)
0
cm_felix
 
En effet, mais la ligne d'initialisation en NSDK donne :

g_adresse_s5commun% = INT WTR$
NEW S5COMMUN,g_adresse_s5commun%, "SEGMENT_"&code$&"_5"


en compilé ( C interprété):

iG_ADRESSE_S5COMMUN= wS2I(szWTR);
iG_ADRESSE_S5COMMUN= (NS_LONG)wMemNew(3,sizeof(S5COMMUN),wLStrCat(wLStrCat(
wLStrCpy(tmp,sz44,13),szCODE,13),sz45,13));


Voila le B....
0