2010-08-17 13 views
2

Je suis presque enterré par la façon dont les différents dialectes de types sont appariés entre le monde .NET et le monde natif. Tels que MFC CList et d'autres choses.Existe-t-il une table des types correspondants pour le marshaling dans P/Invoke & InterOP?

J'espère désespérément ceci:

  • Une sorte de table ou cheetsheet qui répertorie toutes les correspondances entre les types de monde .NET et dans le monde natif.
  • Une table qui répertorie tous les types qui peuvent être marshalés.

Un grand merci !!

Répondre

2

Pour plus d'informations sur la conversion de type par défaut, essayez this chart out. Pour plus d'informations sur Marhsaling en général, vérifiez this page sur.

+0

Merci Dave. Votre réponse est un tir propre. – smwikipedia

+0

@smwikipedia Super, heureux d'entendre que vous étiez en mesure de tout régler. –

2

L'énumération UnmanagedType donne une liste assez complète des types de cibles que vous voulez. Il couvre tous les types de cœurs disponibles en C atleast. Pour les types définis par l'utilisateur en C, vous devrez vérifier s'il s'agit de typedefs de type standard, ou dans le cas de structures, vous devez réécrire la structure en C# et en marshaler chaque champ manuellement.

Les classes C++ (telles que MFC) ne sont pas couvertes ici. P/Invoke ne prend pas en charge la convention d'appel __thiscall (c'est-à-dire les méthodes de classe). Les scénarios courants sur l'importation de code C++ en C# sont d'écrire un wrapper COM pour la classe en utilisant C++/CLI, ou d'écrire un wrapper C basé sur C++ (code de marque extern "C"), puis utiliser P/Invoke sur le wrapper .

+0

Merci Mark. J'apprécie ta réponse. – smwikipedia