47 votes

Ce qui est sûr pour un C++ système de plug-in?

Plug-in les systèmes en C++ sont difficiles parce que les ABI n'est pas correctement défini, et chaque compilateur (ou la version de celui-ci) suit ses propres règles. Toutefois, COM sur Windows montre qu'il est possible de créer un minimum de système de plug-in qui permet aux programmeurs avec différents compilateurs de créer des plugins pour une application hôte à l'aide d'une interface simple.

Soyons pratique, et de laisser la norme C++, ce qui n'est pas très utile à cet égard, de côté pendant une minute. Si je veux écrire une application pour Windows et Mac (et éventuellement Linux) qui prend en charge le C++ plugins, et si je veux donner plug-in auteurs d'un assez grand choix de compilateurs (disons moins de 2 ans les versions de Visual C++, GCC ou Intel C++ compiler), quelles sont les fonctionnalités de C++ pourrais-je compter?

Bien sûr, je suppose que les plugins serait écrit pour une plateforme spécifique.

Sur le dessus de ma tête, voici quelques fonctionnalités C++, que je pense, avec ce que je pense est la réponse:

  • vtable mise en page, utiliser des objets à travers les classes abstraites? (oui)
  • types intégrés, les pointeurs? (oui)
  • les structures, les syndicats? (oui)
  • des exceptions? (no)
  • extern "C" fonctions? (oui)
  • stdcall non-extern "C" fonctions avec construit-dans les types de paramètre? (oui)
  • non stdcall non-extern "C" fonctions définies par l'utilisateur avec les types de paramètre? (no)

Je vous serais reconnaissant de toute l'expérience que vous avez dans cette zone que vous pourriez partager. Si vous connaissez un succès modéré application qui a un C++ système de plug-in, c'est trop cool.

Carl

25voto

Serge Points 4480

Ici est une très bonne lecture sur le sujet. C'est une série d'articles qui couvre l'architecture, de développement et de déploiement d'un C/C++ cross-platform cadre.

Espérons que cela aide!

6voto

Konrad Rudolph Points 231505

Vous pourriez aussi envisager de remplacer les classiques interface du plugin par une interface de script. Il existe quelques très bonnes liaisons pour plusieurs langages de script en C/C++ qui ont déjà permis de résoudre votre problème. Il serait peut-être pas une mauvaise idée de construire au-dessus d'eux. Par exemple, avoir un regard sur coup de pouce.Python.

6voto

KeyserSoze Points 2103

Qt a un très bon système pour les plugins que j'ai utilisé dans le passé. Il utilise Qt meta-object system à surmonter de nombreux problèmes généralement constaté lors de la tentative de développer en C++ plugins.

Un exemple est la façon dont Q_DECLARE_INTERFACE d'œuvres, de vous empêcher d'utiliser un plugin incompatible. Un autre est la clé de construire, assurez-vous de charger le bon plugin pour votre architecture, de l'OS, du compilateur. Si vous n'utilisez pas de Qt système de plugin, ce sont des choses que vous avez à vous soucier de et inventer des solutions sur votre propre. Ce n'est pas forcément la science de fusée, et je ne dis pas que vous seriez d'échouer, mais les mecs de chez Trolltech sont assez intelligents et ont passé un moment de réflexion à ce sujet, et je préfère utiliser ce qu'ils ont créé que de réinventer la roue à moi-même.

Un autre exemple est que RTTI généralement ne fonctionne pas sur des limites de la DLL, mais lors de l'utilisation de Qt, des choses comme qobject_cast qui s'appuient sur le meta-object system faire le travail à travers les limites de la DLL.

3voto

James Devlin Points 6699

Je pense que vous êtes à l'abri de la création d'un système de plugin basé sur:

  • L'emballage de plugin fonctionnalités de bibliothèque (.dll, .donc, etc.)
  • Exigeant que le plugin exposer les principales langage C les exportations.
  • Exigeant que le plugin mettre en œuvre (et à retourner un pointeur/référence) un résumé interface C++.

Probablement le plus de succès C++ système de plugin: une bonne vieille Adobe Photoshop. Et si ce n'est que l'un des synthé virtuel des formats tels que le VSTi etc.

3voto

Peter Stuifzand Points 3160

Le livre Imparfait C++ par Matthew Wilson a une belle info à ce sujet.

Les conseils donnés dans le semble être: tant que vous utilisez le même (ou équivalence) compilateur, vous pouvez utiliser C++, sinon, vous êtes mieux d'utiliser C comme une interface sur le dessus de votre code C++.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X