2009-05-12 8 views
1

car je comprends que tout programme .NET est compilé à MSIL qui est envoyé au CLR qui le compile au code d'assemblage et avec l'aide de JIT il l'exécute.L'utilisation d'une DLL compilée .net à l'intérieur de C++ natif

Je me demandais, car .NET est un wrapper autour de l'API win32 et le CLR convertit finalement le MSIL en programme d'assemblage. N'est-il pas possible pour moi d'écrire une fonctionnalité en C#, de faire une DLL et puis j'utilise un outil qui en fait un fichier .net indépendant complet pour que je puisse l'utiliser dans du code non managé comme C ou C++.

Est-ce que je parle d'Interops et de COM? Cette idée n'est-elle pas différente? Mon but est d'exécuter un DLL .NET sur une machine ne disposant pas de framework .NET.

Répondre

0

Ce n'est pas une méthode prise en charge et de nombreuses fonctionnalités (comme Reflection) reposent sur des métadonnées fournies à un niveau plus élevé que le code machine brut. Certains programmes (appelés .NET linkers) peuvent être utiles, mais ils ne sont pas fiables à 100%.

1

Vous pouvez utiliser le Native Image Generator (Ngen.exe) pour compiler une DLL MSIL vers une DLL de code natif, mais cela ne vous permettra pas de l'exécuter sur un système sans .NET Framework. Vous aurez toujours des références à d'autres DLL du framework et même si vous incluez ces DLL, cela ne fonctionnera pas sur un système sans le framework .NET, car le framework est plus qu'une simple collection de DLL.

+0

En effet, ngen ne peut pas supprimer le besoin de l'assemblage réel. Un assemblage est plus que du code IL. Il contient des métadonnées qui sont toujours nécessaires pour fonctionner. –

0

Si vous fouillez sur le Web, je pense qu'il existe un certain nombre d'outils pour «compiler» les assemblys/code .NET pour supprimer leur besoin de l'infrastructure. Vous ne savez pas comment ils fonctionnent bien ....

1

This KB article explique comment appeler des méthodes managées à partir du code natif. Cependant, vous devez toujours avoir le framework .NET.

1

This project vous permettra de faire des exportations non managées .NET de méthodes statiques.

Questions connexes