2011-03-06 3 views
4

J'utilise un Wrapper C++/CLI pour accéder à une bibliothèque purement C++ (-> non gérée) à partir d'un framework C# (-> managed). Je veux construire dans un mécanisme qui permet à la bibliothèque C++ de pousser des informations sur son statut vers le framework. À mon avis, cela signifie que je devrai appeler au moins une fonction managée à partir d'un code non géré à un moment donné. Est-ce possible et comment puis-je y parvenir?Comment faire pour transférer des données d'un code non géré vers un code managé?

Un grand merci pour votre aide!

événement Meilleures salutations, Jakob

Répondre

7

Utilisez un délégué pour laisser le code non managé appeler une méthode gérée. Marshal :: GetFunctionPointerForDelegate() crée un bouchon qui prend en charge la transition, l'appel d'une méthode d'instance est pris en charge. Vous pouvez convertir le pointeur renvoyé en un pointeur de fonction utilisable par le code non managé. Vous trouverez un exemple de code complet dans this answer.

+0

merci, je vais essayer de le résoudre comme ça en premier. –

2

Je recommande d'utiliser un (géré) pour cela. Vous pourriez avoir votre wrapper C++ appeler une méthode sur votre classe générée C++/CLI qui soulève l'événement.

L'événement peut facilement être souscrit à partir du côté C#, et utilisé comme tout autre événement basé sur C#.

+0

merci pour votre suggestion intéressante! –

Questions connexes