Dynamiquement l'importation d'une classe C++ à partir d'une DLL
Quelle est la bonne façon d'importer une classe C++ à partir d'une DLL? Nous sommes à l'aide de Visual C++.
Il y a le dllexport/exportations.def+LoadLibrary+GetProcAddress au tiercé, mais il ne fonctionne pas sur les classes C++, C fonctions. Est-ce dû à C++ nom du modificateur? Comment puis-je faire ce travail?
OriginalL'auteur Shachar | 2008-09-21
Vous devez vous connecter pour publier un commentaire.
Vous devez ajouter les éléments suivants:
pour éviter de la fonction de déformation.
vous pourriez envisager d'écrire deux fonctions C:
En utilisant uniquement les fonctions que vous pourrez par la suite ajouter/modifier des fonctionnalités de votre objet la création/suppression. Cela est parfois appelé une Usine.
SomeClass
noms ont la forme d'astérisques (c'est à dire être des pointeurs versSomeClass
)?OriginalL'auteur Dror Helper
Trouvé la solution à http://www.codeproject.com/KB/DLL/XDllPt4.aspx
Merci pour vos efforts les gars & les filles
OriginalL'auteur Shachar
J'ai l'habitude de déclarer une interface de classe de base, l'utilisation de cette déclaration dans ma demande, puis utilisez la fonction LoadLibrary GetProcAddress pour obtenir la fonction de fabrication. Le facteur renvoie toujours pointeur du type d'interface.
Voici un exemple pratique, l'exportation d'un document MFC/vue à partir d'une DLL, chargé dynamiquement
OriginalL'auteur titanae
Découvrez cette question. Fondamentalement, il existe deux façons. Vous pouvez marquer la classe à l'aide de _dllexport et puis lier avec la bibliothèque d'importation, et la DLL sera automatiquement chargé. Ou si vous voulez charger la DLL de façon dynamique vous-même, vous pouvez utiliser la fonction de fabrication idée que @titanae suggéré
OriginalL'auteur Graeme Perrow
dllexport/dllimport travaux, avant le nom de la classe dans le fichier d'en-tête et vous êtes bon pour aller.
Généralement que vous souhaitez utiliser dllexport dans la dll, et dllimport dans l'exe (mais vous pouvez simplement utiliser dllexport partout et qu'il travaille, en faisant de ce "droit" le fait tinily plus rapide à charger).
Évidemment, c'est pour avoir un lien en temps de compilation. Vous pouvez utiliser /delayload de l'éditeur de liens directive de "dynamique", mais ce n'est probablement pas ce que vous voulez à partir de la ligne de l'objet.
Si vous voulez vraiment un LoadLibrary style de chargement, vous allez avoir à envelopper vos fonctions C++ avec "extern C" wrappers. Le problème est en raison de l'amputation des noms, vous pouvez taper dans le nom décomposé et il avait un travail.
Les solutions de contournement sont généralement de fournir une fonction C qui retourne un pointeur vers la classe correcte - COM fonctionne de cette façon, qu'elle n'en exporte 4 C fonctions d'une dll qui sont utilisés pour obtenir les méthodes d'interface à l'intérieur de l'objet dans la dll.
OriginalL'auteur gbjbaanb