2009-09-26 9 views

Répondre

5

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.

Questions connexes