2010-10-25 4 views
-1

J'ai tas d'objets C++ natifs et les classes contient des cartes DTL, des cartes de cartes et des listes et des vecteurs.Comment Marshall Marshall objets natifs à l'interface de gestion C++

Je dois appeler des fonctions C++ managées à partir du code natif C++ et avoir besoin de transmettre ces objets natifs et ces conteneurs STL (listes, cartes, cartes de cartes) à C++/CLI. Il a besoin de marshal ou de la façon dont sérialiser ces objets. Comment puis-je faire cela sans aucun problème. Alors que Après marshalling et sérialisation vers C++/CLI géré, les cartes devraient être rassemblées avec des dictionnaires et dictionnaires de dictionnaires, stl liste avec la liste gérée <> et ainsi de suite ..

comment puis-je réaliser cela dans tous les cas? Cela nécessite-t-il une gestion complexe des problèmes de rassemblement ...?

Cordialement Usman

Répondre

1

mise en page de mémoire STL est mise en œuvre spécifique. Par exemple. sizeof (std :: vector) est 16 en version et 20 en mode debug lorsque vous utilisez l'implémentation fournie avec Visual C++. Et vous avez des pointeurs dans les classes STL qui ne peuvent pas être rassemblés de manière significative dans la mémoire gérée. Vous pouvez passer à des types C ou COM indépendants de la plate-forme dans l'interface (par exemple, passer un tableau avec un paramètre count ou un tableau sécurisé) si vous souhaitez effectuer le marshaling car .Net a une meilleure compréhension de ces types. Je recommande COM car il a des types plus riches et supporte d'autres langues au cas où vous en auriez besoin.

Alternativement, si vous avez besoin de vitesse, vous pouvez écrire une fonction modèle marshal_as pour effectuer la conversion afin de pouvoir réutiliser le code de marshaling ou même le tampon de marshaling, ou write a managed wrapper for your C++ objects. Si les données marshalées sont trop volumineuses pour tenir dans la mémoire, vous pouvez également sérialiser les données dans un fichier temporaire ou dans une base de données et les lire à partir du code managé en morceaux.

Questions connexes