2010-05-25 6 views
8

J'ai besoin de savoir comment démarrer l'écriture d'une application basée sur une architecture de plug-in. Je veux dire comment écrire un code de base et laisser les autres développer l'application en ajoutant les plug-ins qu'ils écrivent. Je sais qu'il y a quelques problèmes en C++. la plupart des gens utilisent un autre langage tel que python pour ajouter des plug-ins à leur application C++.application c/C++ basée sur une architecture de plug-in

+0

Voulez-vous dire que les plug-ins doivent être écrits en C++? – xtofl

+0

Cela dépend du système d'exploitation que vous ciblez, dans une certaine mesure –

+0

oui. mais je suis préoccupé par la compatibilité binaire entre l'application principale et les plug-ins écrits en C++ – sepisoad

Répondre

4

Je pense que ce n'est pas la réponse attendre, mais vous pouvez essayer d'examiner les sources Rainmeter. Il est écrit en C++ (certains endroits pourraient être mieux fait, à mon avis, mais dans l'ensemble, c'est OK) et l'ensemble de l'application est fait de telle sorte qu'il ne gère que les plugins.

Même l'API simple est faite via des plugins, il y a aussi un tas d'exemples de plugins contribués, je veux dire, écrits par quelqu'un d'autre (je l'ai fait aussi, un jour).

Je pense que vous pourriez réellement étudier beaucoup de nouvelles astuces dans le développement basé sur le plugin en regardant d'autres applications. Par ailleurs, un autre bon exemple est Miranda IM.

Edit: Aussi, si je han la même tâche, je serais en fait ajouter un peu python (ou quelque chose comme ça) backend à mon application et l'utiliser comme la langue SDK (par exemple, en utilisant boost::python).

+0

comme vous l'avez dit, j'ai besoin de quelques cas à étudier, merci pour les liens. – sepisoad

+0

bien que python soit une solution viable et largement utilisée comme langage d'extension, j'ai besoin de refuser les dépendances de l'application finale, – sepisoad

1

Pourriez-vous définir des points d'accès dans votre application avec lesquels une application externe pourrait communiquer? Supposons que vous définissiez un mécanisme de canal nommé ou un socket TCP/IP, où l'application externe appelle cette API pour manipuler votre application.

étant donné que vous devez enregistrer ces plugins dans l'application principale avant de les autoriser à utiliser votre application. vous pourriez même ajouter des certificats privés publics pour authentifier l'origine de ce plugin, (ie signer le plugin avec une clé privée où les instances de votre application valideraient avec une clé publique)

4

Vous devez:

  • définissent une interface
  • charger votre plugin et lui donner cette interface

Votre lecteur sera en mesure de communiquer avec l'application hôte via cette interface. Cela signifie que vous devez réfléchir soigneusement à ce que vous voulez que vos plugins fassent.

Vous devrez probablement prendre en charge différentes versions de l'interface si votre application hôte change et que vous ajoutez des fonctionnalités.

Questions connexes