OVH Cloud OVH Cloud

new par dll A, delete par dll B == int 3 (help)

4 réponses
Avatar
bastien.armand
Bonjour,

Si l'objet a ete cree dans la dll A il doit etre detruit dans la dll
A. (car A et B ne partage pas la meme moire).

Tu dois rajouter une fonction a la dll A qui va pouvoir etre appelee
de B pour detruire proprement l'objet.

Voila, j 'espere que tu m'as compris.

Note : ce n'est pas vraiment un probleme de c++.

4 réponses

Avatar
syn-ack
merci, c'est bien ce que je pensais alors, j'ai pas le choix!!!!!!!!!!
snifffffff

"Bastien" a écrit dans le message news:

Bonjour,

Si l'objet a ete cree dans la dll A il doit etre detruit dans la dll
A. (car A et B ne partage pas la meme moire).

Tu dois rajouter une fonction a la dll A qui va pouvoir etre appelee
de B pour detruire proprement l'objet.

Voila, j 'espere que tu m'as compris.

Note : ce n'est pas vraiment un probleme de c++.


Avatar
James Kanze
(Bastien) writes:

|> Si l'objet a ete cree dans la dll A il doit etre detruit dans la dll
|> A. (car A et B ne partage pas la meme moire).

Ça dépend comment il a fait l'édition de liens. Normalement,
les parties système sont dans un DLL à part, de façon à ce
qu'elles soient partagées par tout le monde.

|> Tu dois rajouter une fonction a la dll A qui va pouvoir etre appelee
|> de B pour detruire proprement l'objet.

C'est en effet plus propre.

--
James Kanze
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34
Avatar
syn-ack
tu veux parler de segment partagé?

mon probleme c'est que niveau estetique, c'est pas terrible d'avoir ca:

dll A: (ca c'est mon texture manager)
liste()
{
unsigned char *g=0;
B->chargeimage(&b);
...
B->desallouememoire(&b);
}




dll B :

chargeimage(unsigned char **pixel)
{
...
*pixel = new unsigned char[ taille ];

....
}

desallouememoire(unsigned char **pixel) // c'est pas terrible surtout dans
un sdk
{

delete [] *pixel;

}





"James Kanze" a écrit dans le message news:

(Bastien) writes:

|> Si l'objet a ete cree dans la dll A il doit etre detruit dans la dll
|> A. (car A et B ne partage pas la meme moire).

Ça dépend comment il a fait l'édition de liens. Normalement,
les parties système sont dans un DLL à part, de façon à ce
qu'elles soient partagées par tout le monde.

|> Tu dois rajouter une fonction a la dll A qui va pouvoir etre appelee
|> de B pour detruire proprement l'objet.

C'est en effet plus propre.

--
James Kanze
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34


Avatar
Arnaud Debaene
syn-ack wrote:
tu veux parler de segment partagé?


Non : l'idée est de lier tous tes modules (exe et dll) a une même version de
la CRT, une version DLL. de cette manière, on a une seule version de
l'allocateur mémoire pour tout le programme. Dans ces conditions, tu peux
faire les allocations dans un module et les désallocations dans un autre.
Voire un groupe dédié à ton compilateur ou à Windows pour les détails.

Arnaud