begin process at 2008 05 16 04:37:10
1 173 215 membres
57 nouveaux aujourd'hui
13 970 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Problème de chargement de DLL [ Système / Mémoire ] (Toya78)

Problème de chargement de DLL le 26/01/2008 11:35:55

Toya78
Bonjour à tous, Après avoir lu plusieurs articles sur les DLL et leur utilisation, je me retrouve face à un dilemne. J'ai lu qu'il existait un "conflit" entre String et PChar lors de l'appel de fonction de DLL et qu'il fallait utiliser ShareMem qui nécessitait le fichier borlndmm.dll. Or je n'en suis pas encore à ce stade. Voici un code tout simple : procedure TForm1.Button1Click(Sender: TObject); var H : THandle; begin H := LoadLibrary('ma_dll.dll'); end; Ce simple (et inutile) morceau de code me réclame borlndmm.dll (sur un PC sans Delphi). Aurais-je loupé quelque chose ? Je précise que je compile sous Delphi 2007 et que la DLL en question contient 2 fonctions dont tous les paramètres sont des Integer (la DLL est compilée avec Visual C++).

Re : Problème de chargement de DLL le 26/01/2008 12:41:26

cirec
Membre Club
(Admin CS)
Salut,

voici ce que Delphi écrit en commentaire au début d'une nouvelle source de DLL :

{ Remarque importante concernant la gestion de mémoire de DLL : ShareMem doit
  être la première unité de la clause USES de votre bibliothèque ET de votre projet
  (sélectionnez Projet-Voir source) si votre DLL exporte des procédures ou des
  fonctions qui passent des chaînes en tant que paramètres ou résultats de fonction.
  Cela s'applique à toutes les chaînes passées de et vers votre DLL --même celles
  qui sont imbriquées dans des enregistrements et classes. ShareMem est l'unité
  d'interface pour le gestionnaire de mémoire partagée BORLNDMM.DLL, qui doit
  être déployé avec vos DLL
. Pour éviter d'utiliser BORLNDMM.DLL, passez les
  informations de chaînes avec des paramètres PChar ou ShortString
. }

dans ton cas tu peux supprimer ShareMem de la Clause Uses de ta DLL et de ton projet.

Et si la DLL exporte des procédures ou des fonctions qui passent des chaînes en tant que paramètres ou résultats de fonction.
Il te faut fournir BORLNDMM.DLL avec ton application ...
tu trouveras cette DLL dans le répertoire Bin de ton Delphi.

 
@+
Cirec


Re : Problème de chargement de DLL le 26/01/2008 15:02:44

Toya78
Oui Cirec je l'avais vu. Mais justement mon exemple n'appelle aucune fonction de DLL avec des String (il n'appelle même rien du tout) il fait juste un LoadLibrary. Il n'y a aucune autre ligne de code dans l'implémentation. Et pourtant on me demande BORLNDMM.DLL lorsque je fais le LoadLibrary... ce que je ne comprends pas...

Re : Problème de chargement de DLL le 26/01/2008 15:03:34

Toya78
J'ajoute que Sharemem n'apparaît pas dans ma clause Uses bien évidemment.

Re : Problème de chargement de DLL le 26/01/2008 16:46:57

cirec
Membre Club
(Admin CS)

as-tu le source de la DLL
ou les déclarations des deux fonctions ...
parce que ton histoire ne me parait pas très logique ... Bon en même temps je n'ai aucune connaissance en visual C++ Mais histoire d'essayer de comprendre le pourquoi du comment.
 
@+
Cirec


Re : Problème de chargement de DLL le 26/01/2008 17:01:26

Toya78

Je n'ai pas la source malheureusement... la DLL n'étant pas de moi. La DLL contient 2 fonctions (d'après tdump). La DLL sert à décompresser/compresser des fluxs en compression LZS.
Je ne connais qu'une seule des déclarations :

function Compress(Src : Pointer; SrcLen : Integer; Dst : Pointer; var DstLen : Integer) : LongBool

L'autre fonction est Decompress. Je ne connais pas sa déclaration (aucune doc. avec la DLL) mais je suppose que ça ressemble à Compress (en tout cas, pas de String dans les environs).

Je sais que c'est bizarre qu'il me demande BORLNDMM.DLL alors que je n'utilise pas de String et encore moins l'unité Sharemem... J'aimerais bien comprendre et ne plus avoir besoin de ce BORLNDMM.DLL...


Re : Problème de chargement de DLL le 26/01/2008 17:14:58

Toya78
Je viens de faire quelques tests : j'ai créé sous Delphi une DLL contenant une fonction Somme(A, B : Integer).
Avec elle aucun problème : BORLNDMM.DLL n'est pas réclamé du tout lorsque je fais le LoadLibrairy.

J'en déduis donc que ça vient de la DLL écrite sous Visual C++... Dommage que je n'aie rien lu là-dessus.

Re : Problème de chargement de DLL le 26/01/2008 17:25:52

Toya78
Je viens de tester la DLL enquiquinante en la chargeant de manière statique. Aucune erreur si je ne mets pas d'appel de fonction. Par contrôle problème au démarrage si j'écris un appel de sa fonctin : on me demande BORLNDMM.DLL...

Re : Problème de chargement de DLL le 26/01/2008 17:31:52

cirec
Membre Club
(Admin CS)
Désolé mais à part fournir BORLNDMM.DLL avec ton application je n'ai aucune autre solution à te proposer

 
@+
Cirec


Re : Problème de chargement de DLL le 26/01/2008 17:33:38

Toya78
Tant pis Cirec. Je crois en effet que ça risque d'être difficile.
Merci quand même d'avoir pris le temps de me lire :)


Classé sous : problème, chargement, dll, lu, borlndmm

Participer à cet échange

Appels d'offres

Pub



CalendriCode

Mai 2008
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Téléchargements

Boutique

Boutique de goodies CodeS-SourceS