[VC++] AFFECTER 1 ADRESSE CONNUE AU POINTEUR
cm_felix
-
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.
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:
- [VC++] AFFECTER 1 ADRESSE CONNUE AU POINTEUR
- Darkino nouvelle adresse - Guide
- Adresse mac - Guide
- Vc runtime - Guide
- Changer adresse dns - Guide
- Adresse url - Guide
2 réponses
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 ?
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)
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)
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....
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....
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.