web-dev-qa-db-fra.com

Création d'un wrapper c ++. Net simple. Pas à pas

J'ai un projet c ++. J'avoue que je suis un ZERO complet en c ++. Mais j'ai toujours besoin d'écrire un wrapper c ++. Net pour pouvoir travailler avec une bibliothèque c ++ non managée en l'utilisant. Donc, ce que j'ai: 1) Fichiers d'en-tête de projet non gérés. 2) bibliothèques de projets non gérés (.dll et .lib) 3) un projet C++. NET vide que je prévois d'utiliser comme wrapper pour mon application c #

Comment puis-je commencer? Je ne sais même pas comment définir une référence à une bibliothèque non gérée.

S.O.S.

42
Evgeny007

http://www.codeproject.com/KB/mcpp/quickcppcli.aspx#A8

C'est une direction générale. Vous devez créer un projet de bibliothèque de classes C++/CLI, y ajouter une classe .NET (StudentWrapper dans cet exemple), créer une instance de classe non managée en tant que membre de classe managée et encapsuler chaque fonction de classe non managée. La bibliothèque non gérée est ajoutée au projet C++/CLI à l'aide de la liste des dépendances de l'éditeur de liens et non comme référence. Dans le projet - Propriétés - Éditeur de liens, ouvrez Dépendances supplémentaires et ajoutez-y le nom .lib.

Remarque: puisque nous parlons de wrapper C++/CLI, pas de PInvoke! PInvoke est utilisé pour appeler des fonctions exportées (API) et non des classes.

35
Alex F

Vous devez utiliser p/invoke de .NET pour parler à votre DLL non managée.

Essentiellement, vous créez un en-tête de fonction pour chaque fonction que vous souhaitez appeler dans votre DLL non managée et dites à .NET dans lequel DLL la fonction réside, puis appelez cette fonction comme n'importe quelle autre dans votre .NET emballage.

Vous ne devriez même pas avoir besoin de connaissances en C++ - tant que vous connaissez la définition de fonction des fonctions dans votre DLL non managée et les types de données corrects.

8
Andy Shellam