Comment construiriez-vous un encapsuleur en code non managé afin de l'utiliser dans du code managé, et à quel moment devez-vous le faire?Wrapper au code non managé
Répondre
Vous n'avez pas souvent besoin d'un wrapper, de nombreuses DLL avec des fonctions C exportées simples peuvent être pinvoquées avec l'attribut [DllImport]. Une exception pour les exportations C serait une DLL mal conçue qui nécessite le code client pour libérer la mémoire, ce qui ne peut pas être fait par le code managé car il n'a pas accès à l'allocateur.
Le cas où vous avez pour avoir un wrapper est une classe C++ native. Le code managé ne peut pas l'épingler directement puisqu'il ne sait pas comment créer une instance de la classe (ce qui nécessite connaître la taille de l'objet et appeler le constructeur) ni comment le détruire (ce qui nécessite d'appeler le destructeur). C'est assez facile à faire en C++/CLI. Très mécanique, le projet SWIG peut le faire automatiquement. Apprendre cet outil est cependant plus un investissement que d'apprendre à écrire le wrapper.
- 1. conception de classe pour wrapper autour du code non managé
- 2. Maréchal struct non managé au code managé en utilisant C#
- 3. System.AccessViolationException du code non managé?
- 4. Passage de Hashtable au code non managé en utilisant interop
- 5. C++/passe cli (géré) délégué au code non managé
- 6. Géré au code non managé, valeur DWORD à LPVOID
- 7. Appel/Rassemblant chaînes de dll C# au code non managé
- 8. Comment faire passer ce tableau struct au code non managé?
- 9. Partage de transactions DB entre code managé et non managé
- 10. Marshall char ** à un problème de chaîne appelant code non managé de code managé
- 11. P/Invoke BSTR du code non managé
- 12. Code managé et non géré dans .NET
- 13. C# appelant le code non managé
- 14. Un thread non géré s'exécutant Code managé
- 15. MEF et le code non managé
- 16. utilisant le code non managé dans .NET
- 17. Autoriser le code managé en environnement hébergé à rappeler le code non managé
- 18. Appel du code non géré à partir du code managé
- 19. Synchronisation de thread C++/CLI incluant le code managé et non managé
- 20. Débogage du code non managé pendant le débogage du code managé
- 21. Utilisation de code non géré à partir du code managé
- 22. passage champ pointeur non géré contenu dans la classe géré au code non managé
- 23. Passage des chaînes non terminées par null au code non managé
- 24. Bogue avec le code C++ non géré envoyant une chaîne au code managé
- 25. transmission de données du code non géré (C) au code managé (C#)
- 26. Comment passer un tableau d'objets en code non managé?
- 27. Comment faire pour transférer des données d'un code non géré vers un code managé?
- 28. xmlserialization sans code managé?
- 29. C++ de code managé
- 30. char * en code managé?
N'a pas complètement comprendre. Vous dites que les classes c peuvent être pinvoquées mais que C++ ne le peut pas? Pourquoi? –
J'ai spécifiquement abordé ceci dans ma réponse, 2ème paragraphe. –