2010-08-25 8 views
2

Dans mon application, je dois explicitement lier à une DLL. L'application est en QT avec le compilateur gcc.Comment inclure un fichier dll qui a été enveloppé dans une nouvelle DLL?

La DLL que l'application doit lier à est une enveloppe autour d'une autre ancienne DLL. Le but est d'adapter l'ancienne DLL à une nouvelle interface.

J'utilise la liaison implicite lors de la compilation de la nouvelle DLL. La nouvelle DLL est compilée avec msvc 2008. La raison en est que l'ancienne DLL a des fonctions de classe C++ qui ne peuvent pas être reconnues par gcc. La nouvelle interface utilise des fonctions c.

Donc, la grande image est que lorsque je lance mon application, je lier la nouvelle DLL et la nouvelle DLL dépend de l'ancienne DLL. Tout fonctionne bien, sauf que je dois mettre l'ancienne DLL dans le même dossier que l'exe ou le même dossier que le fichier.

J'ai essayé d'ajouter l'ancienne bibliothèque dans le fichier qt .pro de l'application, mais cela n'a pas fonctionné. Y at-il un moyen de déplacer le répertoire de l'ancien fichier dll?

Merci à l'avance

Gooly

Pour indiquer plus clairement, si l'ancien dll et l'application sont compilés avec le même compilateur, je pourrais inclure le chemin de l'ancien dll et lib dans le fichier .pro et le mettre n'importe où je veux. Mais maintenant, seule la nouvelle DLL reconnaît les anciennes fonctions de DLL, donc je ne pouvais plus le faire. Je me demande s'il existe un moyen de modifier le chemin que le fichier exe recherche en cours d'exécution. Maintenant, il recherche à la fois le dossier exe et son dossier parent.

+0

Je ne comprends pas le problème, pourquoi faut-il le déplacer? Vous lui avez donné un nom différent, n'est-ce pas? –

+0

Je veux qu'il soit dans le dossier lib avec d'autres bibliothèques plutôt que dans le dossier de débogage ou de libération qui est généré automatiquement et qui n'est généralement pas inclus dans le logiciel de gestion de contrôle de source. En d'autres termes, je ne pense pas que la DLL devrait être là. – Gooly

Répondre

0

Le système d'exploitation Windows cherche dll d'une manière spécifiée, le lien suivant pourrait aider: Dynamic-Link Library Search

Si vous souhaitez conserver le dll dans un autre dossier, puis en ajoutant le dossier lib à votre variable PATH fonctionnera , mais vous lorsque vous déployez le paquet, vous devrez vous assurer que la DLL sur la machine cible peut être trouvée en utilisant l'ordre de recherche de la bibliothèque comme spécifié dans le lien.

+0

Merci Steven, c'est vraiment utile. – Gooly

0

J'ai essayé de modifier l'ordre de recherche dll avec SetDllDirectory qui est mentionné à partir du lien dans la réponse de Steven. Cependant, il semble que ce soit une fonction msvc seulement. (Je ne suis pas sûr, mais j'ai inclus le fichier mingw winbase.h et il ne le reconnaît toujours pas.)

J'ai donc essayé de modifier la variable PATH en utilisant putenv et cela fonctionne.

Questions connexes