Chargement de DLL

Résolu
cs_barbichette Messages postés 220 Date d'inscription lundi 30 octobre 2000 Statut Membre Dernière intervention 15 juillet 2013 - 5 mars 2008 à 20:11
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 - 8 mars 2008 à 13:48
Salut,

J'ai un petit souci. Je ne sais pas si c'est possible de faire marcher ceci :
- J'ai une DLL qui charge le contenu d'un fichier dans un tableau [0..255]of byte;
- dans mon application, j'appel une première fois loadlibrary puis GetProcAdress pour lier à la fonction de chargement
- Je lance le chargement d'un fichier
- dans mon application, j'appel une deuxième fois loadlibrary puis GetProcAdress
- Je relance le chargement d'un deuxième fichier


Et là... il écrase le contenu en mémoire du premier appel...

Alors que je voudrai "2 instances" de la dll avec le contenu des deux fichiers dans chaque instance.
Puis pouvoir interroger aussi bien la première sur son contenu ou la deuxième avec son propre contenu.

Est-ce possible de charger 2 fois une Dll mais à deux endroits différent de la mémoire ????

8 réponses

Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
5 mars 2008 à 22:51
je pense pas que ce soit possible, essaye ca, tu vera le resultat :

procedure TForm1.Button1Click(Sender: TObject);
var
  h1, h2: thandle;
  p1, p2: pointer;
begin
  h1 := LoadLibrary('kernel32');
  h2 := LoadLibrary('kernel32');
  p1 := GetProcAddress(h1, 'GetVersion');
  p2 := GetProcAddress(h2, 'GetVersion');
  showmessage('meme handle : '+BoolToStr(p1=p2, true));
  showmessage('meme proc : '+BoolToStr(p1=p2, true));
end;
3
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
7 mars 2008 à 12:38
Salut,

Tu peux aussi faire des allocations dynamique du tableau dans la dll.
Mais il faudra libérer les tableaux dans la dll, Sauf si tu utilises ShareMem, mais c'est pas franchement conseillé. Ca doit pouvoir se faire dans le finalize, ou en interceptant le PROCESS_DETACH.

On ne peut pas facilement charger deux fois une même dll. Peut être avec MapAndLoad.
3
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
5 mars 2008 à 22:14
je suis pas sur que tu puisse varger 2 fois ta dll, mais par contre tu peux passer ton buffer a ta dll.
je m'explique :

procedure MaProcDansLaDll(Buffer: array[0..255]of byte; fichier: string);
begin
    //remplissgae du buffer depuis le fichier
end;

ainsi, tu met tes 2 buffer en variable dans ton exe, et pour chaque appel de ta dll, tu passe un buffer different
0
cs_barbichette Messages postés 220 Date d'inscription lundi 30 octobre 2000 Statut Membre Dernière intervention 15 juillet 2013
5 mars 2008 à 22:30
Effectivement, je vais peut-être faire ça...
D'autant que j'accède à ma DLL via une class TObject.
Donc, 2 classes, deux tableaux.
C'est tout bête, mais y'avais pas pensé....

J'attend quand même pour voir si il y a une autre possibilité directement par la DLL...
Merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
8 mars 2008 à 13:30
 






@+
Cirec
0
cs_barbichette Messages postés 220 Date d'inscription lundi 30 octobre 2000 Statut Membre Dernière intervention 15 juillet 2013
8 mars 2008 à 13:35
Merci de ta participation Cirec...

Barbichette
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
8 mars 2008 à 13:47
Salut,

que de complications ....

Il suffit de creer un Objet dans la DLL qui se charge de tout
Une unité avec les déclarations de l'objet qui se trouve dans la DLL (pour y accéder depuis l'application) et voilà le tour est joué ...
ça fonctionne très bien, l'accès est rapide (pour un Array[0..255] Of Byte)
et aucun problème d'accès, libération ou fuites de mémoire

Et donc en créant deux objet dans l'application on a acces au deux tableaux que l'on peut modifier et/ou consulter à souhait

 
@+
Cirec

<hr siz="" />
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
8 mars 2008 à 13:48
Désolé,
j'ai eu un problème avec mon navigateur

 
@+
Cirec

<hr siz="" />
0
Rejoignez-nous