2009-07-30 7 views
3

Lors de la création d'une DLL avec Visual C++ 2008, j'ai plusieurs choix. Je peux créer une "bibliothèque de classes" , qui je crois me donnera une bibliothèque .Net qui utilise l'extension CLI (gérée) de C++. Puisque je ne veux pas cela, et j'ai supposé que j'ai besoin d'un fichier .LIB statique pour lier dans un autre projet exécutable de fenêtres Visual C++, je choisis à la place "Projet Win32" et, dans le panneau Paramètres de l'application, spécifie un DLL C++ (pas MFC).Exporter des classes non gérées à partir d'une DLL Visual C++?

Cela va créer un projet avec un fichier .cpp qui est censé être où je définis "les fonctions exportées pour l'application DLL".

Cela ne semble pas être ce que je veux non plus. Fondamentalement, ce que je cherche est l'équivalent C++ natif de ce qui, en C# .NET, serait un assemblage de bibliothèque de classes. Je veux emballer des classes dans une DLL, puis avoir un projet 0.EXE utiliser les classes DLL en incluant les fichiers d'en-tête du projet DLL et le lien avec un fichier .LIB pour résoudre les références.

Quelle est la manière habituelle de faire cela?

Répondre

4

Vous le faites correctement. Ce dont vous aurez besoin est de marquer vos classes avec __declspec(dllexport) pour les rendre disponibles de l'extérieur du projet. Lorsque vous générez le projet, vous générez à la fois .DLL et .LIB.

+0

Très bien. Et une approche similaire de l'autre côté à importer? – Buggieboy

+0

Jetez un coup d'œil à ce que fait le code généré automatiquement. Il s'agit en fait du maclport/import basé sur une directive précompilateur, de sorte que le consommateur n'a pas à penser à l'importation ou à l'exportation. – ctacke

+0

Voir ma réponse ici pour une élaboration sur ce dont parle ctacke (http://stackoverflow.com/questions/1179103/visual-studio-2005-linker-problem/1179118#1179118) –

1
  • Créer un nouveau projet
  • Visual C++: Win32: Projet Win32
  • Paramètres de l'application sélectionnez DLL et vérifier « Symboles d'exportation »

Lorsque vous générez le projet, il bouchonner un Classe exportée pour vous, généralement nommée C {MyLib}

1

Vous avez raison de créer une DLL C++ (sans MFC) Vous pouvez créer vos classes et les points d'entrée que vous définissez seront exportés à partir de cette DLL. L pour une utilisation par un autre code C++ (par exemple, une application Win32 écrite en C++). Comme les noms C++ sont automatiquement remplacés par des valeurs bizarres et merveilleuses, il n'est pas pratique de les exporter tels quels si les clients de la DLL sont, par exemple, des programmes C. Mais si tout est en C++, vous devriez être OK. Si vous créez des classes, vous pouvez choisir de les lier dynamiquement (en tant que DLL), mais vous aurez besoin d'une bibliothèque d'importation (créée pour vous automatiquement) qui contient les définitions de symboles de la DLL. Vous pouvez également choisir de lier de manière statique votre code à partir d'une application - dans ce cas, vous obtiendrez une bibliothèque statique (également un fichier .LIB) qui contient le code objet réel dans vos classes plutôt que des symboles dans une DLL. L'avantage d'une DLL est, bien sûr, que si vous écrivez plusieurs applications en utilisant votre bibliothèque, elles peuvent toutes partager la DLL; avec une bibliothèque statique, ils contiendraient chacun une copie de votre code de bibliothèque.

1

Je pense que cet article décrit ce que vous essayez de faire: http://www.codeproject.com/KB/mcpp/usingcppdll.aspx

Personnellement, je préfère également exporter des fonctions C (par opposition à C++) où je fais le ce pointeur explicite pour éviter d'avoir à se soucier de compilateur spécifique la décoration du nom de la méthode et l'exposition des fonctions générées par le compilateur.

Questions connexes