2011-02-09 5 views

Répondre

2

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.

+0

N'a pas complètement comprendre. Vous dites que les classes c peuvent être pinvoquées mais que C++ ne le peut pas? Pourquoi? –

+1

J'ai spécifiquement abordé ceci dans ma réponse, 2ème paragraphe. –

Questions connexes