Comment ça marche? A-t-il des parties distinctes - certaines méthodes sont gérées, d'autres sont non gérées, est-ce que toutes les méthodes sont gérées, essayant de tout gérer et de faire les appels interopérables quand il le faut?Comment C++/cli fonctionne-t-il en interne avec des pièces non gérées?
Répondre
Il existe trois compiler switches liés à la génération de code managé en C++/CLI:
/clr:pure
fait le compilateur produit du code MSIL. Aucune fonction non managée n'est autorisée (tout est compilé dans MSIL). Ce mode est similaire au code C# unsafe
. Dans ce mode, vous pouvez utiliser le CRT dont une version MSIL pure est disponible. Les assemblys compilés dans ce mode ne peuvent pas être utilisés dans des environnements d'approbation partielle nécessitant un code vérifiable (par exemple, certains assemblys hébergés par SQL Server).
/clr:safe
permet au compilateur de produire un code MSIL vérifiable, similaire au compilateur C#. Aucun interopérabilité C++ n'est autorisé. Vous pouvez exécuter des assemblys /clr:safe
dans des environnements de confiance partielle dans lesquels la vérifiabilité est appliquée par la stratégie de sécurité.
/clr
génère des assemblages mixtes. Le binaire contiendra à la fois le code MSIL et le code natif. Ils ne sont pas mélangés ensemble en une seule classe. Les parties gérées et non gérées sont séparées et le compilateur génère du code pour interopérer et rassembler les données entre deux parties si nécessaire.
Pour répondre directement à votre question, aucune "conversion" spécifique n'est effectuée. Le code non géré n'est tout simplement pas autorisé dans les modes pure
et safe
. Là où c'est autorisé, les éléments gérés sont compilés jusqu'à MSIL et les éléments non gérés sont compilés en code machine. Tout interop entre eux nécessite le compilateur pour générer du code. Il n'y a pas de magie là-bas. Il cache juste quelques trucs d'interopérabilité du programmeur mais le code est là quand même.
- 1. Exceptions non gérées avec Global.asax
- 2. Options non gérées à gérées: considérations sur les performances
- 3. Gestion du problème des exceptions non gérées
- 4. Bonne bibliothèque de journalisation pour les applications gérées/non gérées?
- 5. Global.asax et exceptions non gérées
- 6. Capturez toutes les exceptions non gérées automatiquement avec WebService
- 7. Exceptions non gérées Crashing VS 2008
- 8. Consignation automatique des exceptions non gérées sans utiliser try/catch
- 9. Enregistrement des exceptions non gérées pour Windows Forms
- 10. Les messages du journal des événements sont développés lorsque des exceptions non gérées sont gérées par ASP.NET
- 11. N'importe lesquels ont un raccourci/macro Visual Studio pour basculer entre les exceptions gérées/non gérées?
- 12. Obtention de fonctions C++ non gérées à partir de C#
- 13. Plug-in de vérificateur d'exceptions non gérées pour Visual Studio
- 14. Enregistrement des messages d'application et des exceptions non gérées dans l'application ASP.NET MVC
- 15. Librairies non gérées liées statiquement et CLR C++
- 16. Bibliothèques C++ non gérées - différences entre VS2005 et VS2008?
- 17. Comment envoyer un email avec des pièces jointes en utilisant SmtpClient.SendAsync?
- 18. Filtre d'exceptions non gérées dans un service Windows
- 19. Comment voir les détails des exceptions gérées dans WinDBG?
- 20. Exporter des classes non gérées à partir d'une DLL Visual C++?
- 21. Paramètres spécifiques aux pièces avec MEF
- 22. PHP Restitution Pièces jointes de fichiers avec en-têtes
- 23. Libération non gérée dans un exécutable géré provoquant des exceptions gérées
- 24. Est-ce que Javascript déclenche un événement pour les exceptions non gérées/non interceptées?
- 25. Commandes de débogage (step over/into) provoquent des exceptions non gérées
- 26. Problème de changement de pièces avec un nombre infini de pièces de chaque dénomination
- 27. Gestion des erreurs non gérées qui se produisent dans un processus threadé secondaire
- 28. MS Excel utilise-t-il des macros en interne?
- 29. Obtenir html interne avec jQuery?
- 30. SharePoint via les services Web: comment ajouter des pièces jointes?