Dans l'onglet Linker -> Propriétés avancées du projet DLL, vérifiez que la valeur de Import Library (le fichier .lib que vous recherchez) est correcte/raisonnable. La valeur de cette propriété déterminera le nom de la bibliothèque d'importation et l'endroit où l'éditeur de liens l'écrira. Vous pouvez également avoir besoin de générer un fichier de définition d'importation (.def) dans votre projet, ou vérifier vos fichiers d'en-tête et vous assurer que vos fonctions exportées sont marquées avec le qualificateur __declspec (dllexport) dans le fichier d'en-tête. Ceci est habituellement basculée par un #define tels que:
#ifdef MYAPI_EXPORTS
#define MYAPI_API __declspec(dllexport)
#else
#define MYAPI_API __declspec(dllimport)
#endif
void MYAPI_API foo(int bar);
Fondamentalement, vous voulez que le compilateur voir dllexport quand il construit la bibliothèque, mais dllimport lorsque votre code client est #including le fichier d'en-tête. Si Visual Studio a généré la structure de projet de base, il a probablement déjà créé un #define approprié à utiliser.
Vous n'avez pas besoin de créer le fichier .def et d'ajouter le dllexport, juste l'un ou l'autre. Je préfère ce dernier. En outre, si vous choisissez d'utiliser un fichier .def, vous devez le spécifier dans les propriétés de l'éditeur de liens de votre projet de bibliothèque.
La valeur est définie sur $ (TargetDir) $ (TargetName) .lib qui est la même valeur d'autres DLL que j'ai dans le projet qui fonctionnent. –
C'est vraiment étrange, pouvez-vous ajouter le commutateur de ligne de commande manuellement (dans la feuille de propriétés de la ligne de commande) pour spécifier la bibliothèque d'importation? Tels que /IMPLIB:C:\MyDll.lib? – Jeremy
J'ai ajouté ce commutateur à la fois à la ligne de commande de l'éditeur de liens et à la ligne de commande du compilateur et le fichier spécifié n'a pas été créé ... il refuse simplement de créer une bibliothèque lib!?! –