Comment référencer une dll de Visual Studio sans fichier lib
J'ai besoin d'ajouter un tiers de la bibliothèque de mon projet, et ils ne fournissent qu'une .dll fichier (pas de .lib)
J'ai ajouté de la dll pour le projet en allant sur la Page de propriétés du projet en vertu de la Common Propriétés -> Références -> Ajouter une Nouvelle Référence
Je peux voir les dll sous les Dépendances Externes de dossier dans l'Explorateur de solutions, donc je suppose qu'il a été compris correctement.
Mais comment je fais référence à la dll?
Lorsque j'essaie d'ajouter une variable d'instance (Par exemple, MCC::iPort::ASCII iPort) pour accéder à la classe dll, j'obtiens l'Erreur: le nom est suivi de":: "doit être une classe ou d'un nom d'espace de noms, mais je sais que c'est le nom de la classe, je peux le voir dans la dll info en vertu de Dépendances Externes.
.lib
fichier de la mise en œuvre de la liaison de paie, pour le .dll
.OriginalL'auteur Heather | 2015-07-29
Vous devez vous connecter pour publier un commentaire.
Le seul moyen d'accéder à nu DLL sans .fichier lib est de charger la DLL explicitement avec
LoadLibrary()
, obtenir des pointeurs vers les fonctions exportées vous souhaitez accéderGetProcAddress()
, puis jeté ces pointeurs pour le bon fonctionnement de la signature. Si la bibliothèque exportations de fonctions C++, les noms que vous avez à passer àGetProcAddress()
seront déformés. Vous pouvez afficher la liste de l'export des noms avecdumpbin /exportations your.dll
.Comme il a été noté par les autres, une LIB fichier peut être créé. Obtenir la liste des fonctions exportées à partir de
dumpbin /exports your.dll
:De mettre les noms dans un fichier DEF:
Maintenant faire le fichier LIB:
Pour les cas où le nom a été décoré, soit en C++ name mangling ou 32 bits
stdcall
convention d'appel, il suffit de copier et coller les nomsdumpbin
signalés, et d'amputation.il est possible de créer importer une bibliothèque de DLL, gcc peut même lien avec dll directement
que faire si dumpbin sorties des noms comme _NWET@16 = _NWET@16, mais dans l' .h de fichier le nom de la fonction est NWET? Que faisons-nous écrire .fichier def dans ce cas? Je vous remercie à l'avance
Pour 32-bit
stdcall
fonctions, le trait de soulignement préfixe et le paramètre de l'utilisation des piles suffixe est ajouté au nom de fonction exportée. Donc, vous devriez mettre_NWET@16
dans le fichier def.OriginalL'auteur Khouri Giordano
Si vous n'avez pas de
.lib
fichier, vous pouvez en créer un à partir de la.dll
:https://adrianhenke.wordpress.com/2008/12/05/create-lib-file-from-dll/
Espère que ça aide.
OriginalL'auteur Richard Vu