2011-11-06 5 views
0

J'ai créé un fichier .dll simple et j'essaie de l'utiliser dans un projet de test simple. Cependant, lorsque j'essaie d'ajouter une référence, il n'y a pas de choix et il n'y a pas d'option "Parcourir". Je soupçonne que cela puisse avoir quelque chose à voir avec mon PATH car lorsque j'installais CMake (une dépendance pour un projet de studio non visuel non apparenté) CMake a décidé de supprimer TOUT dans mon PATH.Visual C++, aucune référence essayant d'ajouter .dll

voir ma capture d'écran: http://jsfiddle.net/t84BS/ (données-uri peuvent ne pas apparaître dans IE)

image I que je devrais voir quelques références .NET là au moins.

+2

Je pense que vous mélangez un peu en utilisant des DLL dans des projets .NET et dans des projets C++ natifs. –

+0

Vous avez probablement raison, je veux juste ajouter ma DLL, mais je pensais que parce que je ne vois aucune référence que quelque chose est foiré. Je suis une procédure pas à pas MSDN (http://msdn.microsoft.com/en-us/library/ms235636(v=vs.80).aspx) et s'est coincé sur l'étape qui explique comment ajouter une référence à la dll – ActionOwl

Répondre

1

Je ne suis pas sûr de ce que vous devriez voir dans votre IDE. Avez-vous un fichier .def? Pour obtenir tous les symboles exportés à partir d'une DLL dll exécuter dumpbin /EXPORTS my.dll

En ce qui concerne la variable PATH exécuter for %G in ("%path:;=" "%") do @echo %G pour voir chaque chemin sur une ligne distincte.

Pour ajouter de nouveaux chemins de type PATH=%PATH%;C:\My\New\Path

Peut-être que tous les chemins sont mis à se écrasé quelque part. vérifiez votre autoexec.bat Enfin, réinstallez simplement Visual Studio.

+0

Mon chemin a seulement 2 entrées, l'une pour CMake, et une pour le système 32 que j'ai ajouté après avoir réalisé que CMake a tout effacé dans mon chemin: "C: \ Program Files (x86) \ CMake 2.8 \ bin" "C: \ WINDOWS \ System32" – ActionOwl

1

En C++ natif, vous n'ajoutez pas de DLL en tant que références. Vous devez inclure l'en-tête et le lien dans un fichier LIB ou DEF créé à partir de la DLL. D'abord, vous devez inclure les en-têtes fournissant le code dont vous avez besoin. Assurez-vous que toutes les fonctions DLL sont marquées comme __declspec(dllimport) ici (elles doivent être dllexport lors de la construction de la DLL elle-même, dllimport lors de son utilisation). Cela peut prendre une définition en haut du fichier ou quelque chose. Une méthode courante est la suivante:

#ifdef IMPORT_MY_LIB 
# define MY_LIB_API __declspec(dllimport) 
#else 
# define MY_LIB_API __declspec(dllexport) 
#endif 

Ensuite, vous devez lier avec le LIB. Il y a deux méthodes pour le faire, l'une est vaguement plus correcte et l'autre est plus simple. La méthode correctish est d'aller dans les propriétés du projet, dans la section des paramètres de l'éditeur de liens, d'ajouter la bibliothèque comme dépendance supplémentaire (les options devraient ressembler à celles de VS2008 et 2010, peut-être d'autres).

La méthode plus simple que je l'utilise pour les tests et les remplacer par le bon avant la production, est d'ajouter un:

#pragma comment(lib, "Library.lib") 

directive à un de vos fichiers.

Le fichier LIB est créé lorsque vous compilez votre DLL et doit être utilisé pour lier cette DLL à d'autres.

Il existe une méthode de liaison au moment de l'exécution, en utilisant l'API Windows, qui peut être intéressante par la suite mais n'est pas nécessaire pour cela.

Questions connexes