Un petit doute sur les pointeurs et les DLL

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
ker2x
Messages : 61
Inscription : dim. 11/mai/2008 7:27

Un petit doute sur les pointeurs et les DLL

Message par ker2x »

Bonjour,
Si je me trompe pas, l'application et la DLL partage le meme espace memoire ?

Si je crée un espace memoire avec AllocateMemory(*Buffer), dans le code de l'application, ou dans le code de la DLL, cet espace memoire sera accessible via une ProcedureDLL ou via une procedure dans l'application principale (a condition de connaitre le pointeur et la taille) ?

Un truc qui m'echappe par contre... Une DLL n'est chargée qu'une seule fois.
Si j'ai 2 applications qui accedent a la même DLL, ces 2 application vont elle partager le meme espace memoire ? Ca me parrait debile... alors je me dit que j'ai raté un truc.

Et si je crée une variable globale (horreur!) dans la DLL et que le contenu de cette variable est modifiée... Elle sera modifié pour toutes les application utilisant la DLL ? La aussi ca me parrait... bizzare :)
Xpetera
Messages : 52
Inscription : sam. 02/févr./2008 22:25

Message par Xpetera »

"
Et si je crée une variable globale (horreur!) dans la DLL et que le contenu de cette variable est modifiée... Elle sera modifié pour toutes les application utilisant la DLL ? La aussi ca me parrait... bizzare Smile "


même si j'y connait rien en DLL buffers etc enfin tout ce qui touche à la mémoire , je pense peut être que l'application charge la dll au départ et que si un contenu de cette DLL est changé je ne pense pas que cela s'applique sur toutes les applications vu qu'elles l'auraient chargée au départ
ker2x
Messages : 61
Inscription : dim. 11/mai/2008 7:27

Message par ker2x »

Autrement dit :

- la partie "code" n'est chargé qu'une seule fois en memoire
- la partie "data" est alloué specifiquement a chaque application utilisant la DLL. (et autant de fois qu'il y a d'application utilisant la DLL)

J'ai bon ?
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

La DLL sera chargée dans chacun des espaces mémoires des processus, si tu veux partager un même espace mèmoire, tu peux utiliser un fichier mappé:

http://purebasic.fr/french/viewtopic.php?t=716
ker2x
Messages : 61
Inscription : dim. 11/mai/2008 7:27

Message par ker2x »

Haa interessant, merci pour le lien, ca servira :)
ker2x
Messages : 61
Inscription : dim. 11/mai/2008 7:27

Message par ker2x »

Ah tiens, j'ai encore une question :oops:

J'ai besoin de declarer une structure dans ma DLL.
Une de mes procedure retournera un pointeur vers cette structure.

Y'a til un moyen de faire connaitre la ... structure de la structure a l'application ? Ou il faut que je la redeclare (de la meme facon :P ) dans l'application ?
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Il faut déclarer la structure deux fois.
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

C'est la même chose que quand tu utilises une dll de Microsoft.

La structure est déjà déclarée dans la dll, mais tu la déclares aussi dans ton programme.
ker2x
Messages : 61
Inscription : dim. 11/mai/2008 7:27

Message par ker2x »

ok 8)
Anonyme

Message par Anonyme »

c'est la base , c'est deux structures sont exactement les même une fois compilé :

Code : Tout sélectionner

structure A
a.l
b.l
c.l
d.l
endstructure


structure Pareilque_A
Pareilque_a.l
Pareilque_b.l
Pareilque_c.l
Pareilque_d.l
endstructure
c'est juste la syntaxe qui change dans le code source. la structure fait toujours 16 bytes en mémoire.


Et si je crée une variable globale (horreur!) dans la DLL et que le contenu de cette variable est modifiée
Admettons que tu code une dll perso avec une variable globale TOTO
et que dans un exe tu déclares TOTO aussi , et que tu modifie cette variable , la variable TOTO au seins de la dll ne sera pas touché , car une fois compilé elle ne s'appelle pas TOTO, c'est une simple adresse mémoire.

@++
ker2x
Messages : 61
Inscription : dim. 11/mai/2008 7:27

Message par ker2x »

Cpl.Bator a écrit : Admettons que tu code une dll perso avec une variable globale TOTO
et que dans un exe tu déclares TOTO aussi , et que tu modifie cette variable , la variable TOTO au seins de la dll ne sera pas touché , car une fois compilé elle ne s'appelle pas TOTO, c'est une simple adresse mémoire.

@++

Sauf que tu peux importer une variable.

Exemple :

Import "toto.lib"
MaVariable.<type> [as "NomSymbole"]
EndImport

Ce qui me laisse penser que, pour une variable importée, si elle est modifiée dans la DLL, elle est modifiée dans l'appli, et vice versa, car l'espace memoire de cette variable est partagé quand on l'importe.

Enfin, c'est ce que j'ai compris, c'est la question que je me pose.
Je crois que le plus simple c'est encore d'essayer... Mais d'abord : dodo :roll:
Anonyme

Message par Anonyme »

tu importes des fonctions , mais pas des variable, relis mon post.
les variables ne sont pas exporté.
pour modifier une variable au seins d'une dll , il te faut son adresse.
fait des tests , tu verras bien.

@++
Répondre