web-dev-qa-db-fra.com

Prise en charge de C++/CLI dans .Net Core

Notre structure de projet est comme 

native.dll: - Ceci contient du code natif pur écrit en c\c ++ . Ce fichier native.dll expose certaines fonctions à l'aide du fichier * def.

Wrapper Library(wrapper.dll compiled with .Net framework v4.0): - Pour utiliser la fonctionnalité de native.dll, une Wrapper lib(wrapper.dll)est écrite en C++\CLI à l'aide de :clr\oldsyntax. Ce wrapper a tous les codes De Interoperability et Marshalling.

Application(Console App v4.0) utilise directement wrapper.dll pour utiliser les fonctionnalités fourniesby native.dll

Maintenant, ce projet doit être exécuté dans .Net Core. Cela signifie que nous aurons un .Net Core application qui sera reference wrapper.dll qui à son tour fera référence à native.dll.

Je sais que cela ne fonctionnera pas directement. Mais le problème est si .Net Core (CoreCLR) est compatibleenvironnement d'exécution C++\CLI (clr\oldsyntax)} _ ?

Si non, quelles peuvent être les solutions possibles pour que cette application fonctionne?

18
User1234

si .Net Core (CoreCLR) prend en charge l'environnement d'exécution C++\CLI (clr\oldsyntax)?

Autant que je sache, il y a pas de plan pour supporter C++/CLI avec .NET Core .

Si non, quelles peuvent être les solutions possibles pour ce travail d'application?

Vous pouvez (devriez) fournir une API C. Mono, par exemple, prend en charge P/Invoke _ et .NET Core prend également en charge P/Invoke (voir aussi cette question de débordement de pile } _ et ce ticket associé à DllMap } _).

8
Sonic78

Une autre solution potentielle (bien que, évidemment, une tâche assez difficile) si vous souhaitez vous en tenir à C++ (c'est-à-dire exposer une interface OO à .NET) peut consister à consulter CppSharp à partir du projet mono. Il est capable d'exposer du code C++ natif via un wrapper C # généré automatiquement. Il supporte Windows, Linux ainsi que OSX. Cependant, je ne sais pas si le code généré peut être compilé sur une cible standard .NET (sans essayer de le faire). Je ne peux que supposer que ce serait le cas, car le code généré n’utilise aucune API sophistiquée (c’est essentiellement du code interop et marshalling); et, en passant, il est également possible de personnaliser le processus de génération (bien que, encore une fois, ce ne soit probablement pas une tâche facile).

1
odalet