Question

J'aimerais créer un projet C # et implémenter le code natif existant (C ++). Est-ce que quelqu'un connaît un bon tutoriel à ce sujet?

Merci!

Était-ce utile?

La solution

Vous pouvez utiliser P / Invoke et appeler des méthodes non gérées. Je vais vous poster quelques exemples: Ceci fait référence à la documentation officielle de MSDN. Il s'agit d'un site Web géré par la communauté contenant la plupart des bibliothèques Windows non gérées courantes, ainsi que des signatures et des exemples de méthodes

Autres conseils

Si votre code C ++ est géré (comme vous le dites), je vous conseillerais de le laisser en tant que C ++ à moins que ne puissiez pas vous en tenir à une très bonne raison: les futurs assemblys C # (etc.). devrait pouvoir simplement le référencer 'tel quel'.

Je suppose que, par implémentation du code existant , vous voulez l'appeler à partir de C #, avec un minimum de modifications du code C ++.

Je suis un fan et un acheteur récent du livre C ++ / CLI en action , qui a quelques exemples de chapitres utiles en ligne.

Cette l'introduction à CodeProject constitue un bon point de départ.

L'auteur de C ++ / CLI in Action a rédigé plusieurs articles sur CodeProject. Faites défiler la liste jusqu'à la section C ++ / CLI sur son index .

L’article dans Wikipedia sur P / Invoke présente plusieurs raisons pour lesquelles vous ne voudrez peut-être pas d'utiliser cette approche, avec laquelle je suis d'accord:

  • perte de prise en charge de la saisie par le compilateur
  • type de données ou problèmes d'alignement possibles car vous devez mapper les types à la main
  • besoin d'épingler des objets collectés avec des ordures

Le meilleur point de départ sur MSDN est le article de synthèse .

Le moyen le plus simple de procéder est de créer un projet C ++ / CLI, qui vous permettra de mélanger C ++ géré et non géré. Vous pouvez ensuite encapsuler vos classes C ++ non gérées existantes avec un wrapper .Net géré que votre code C # peut appeler directement. Le magazine MSDN propose un article de bonne qualité sur C ++ / CLI.

Interop ne sera vraiment utile que pour appeler des fonctions de style C. Vous ne pouvez pas vraiment l'utiliser pour interagir avec des classes C ++ pures.

J'ai appris cela en le faisant. Je n'ai donc pas de bon tutoriel, mais vous devez être conscient de quelques points: le C ++ géré et le C ++ / CLI s'intègrent au code non géré avec très peu de coutures laides. Ce n'est pas le cas avec C #. En C ++ managé, il est tout à fait possible de faire quelque chose comme ceci:

dotNetForm->Text = S"My Project"; // regular managed code
::SetWindowText(dotNetForm->Handle, "Your Project"); // mixed managed/unmanaged

alors qu'en C #, vous devez invoquer P / Invoke dans SetWindowText - ce n'est pas ce que vous feriez vraiment: ce n'est qu'un exemple simple, mais vous devez être conscient du fait que le compilateur C ++ géré est une étrange combinaison d'interopérabilité pour vous de manière transparente et ne rien faire pour vous en même temps (c’est-à-dire que cela ne fera pas de démarchage implicite).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top