2010-03-22 2 views
1

J'utilise Visual Studio 2008. J'ai une DLL et un programme de test EXE. Il y a un fichier d'en-tête pour la DLL qui contient ceci:Wrong Library Importé via #pragma comment (lib, ...) dans Visual C++

#ifdef _DEBUG 
    #pragma comment(lib, "FooD.lib") 
#else 
    #pragma comment(lib, "Foo.lib") 
#endif 

L'objectif est de relier dynamiquement à FooD.dll par la bibliothèque d'importation FooD.lib, pour une version de débogage, et FOO.DLL pour une sortie construire. Le problème est que lorsque j'exécute le programme de test de débogage-construction, il veut être lié à Foo.dll.

J'ai vérifié que _DEBUG est défini pour le programme de test dans une version de débogage. Si je remplace le #pragma comment avec une directive #error, je vois l'erreur, donc je suis à peu près sûr que le #pragma comment est en cours de traitement comme je l'espère. J'ai également vérifié que les deux FooD.dll et FooD.lib existent. (Foo.dll et Foo.lib n'existent pas.) Mais à l'exécution, j'obtiens un message d'erreur "Impossible de trouver Foo.dll".

Une idée de ce qui pourrait ne pas aller, ou où je peux chercher pour comprendre pourquoi la DLL incorrecte est recherchée à l'exécution?

Répondre

1

trouvé mon problème: le fichier Foo.def avait cette ligne:

LIBRARY "Foo.DLL" 

Cela provoque la bibliothèque d'importation pour spécifier Foo.dll, quel que soit le nom de la DLL réelle est. Donc, je viens de commenter cette ligne, et tout a bien fonctionné par la suite.