Empfehlung für C ++ Wrapper für plattformübergreifendes in-process dynamischen Bibliothek Bindungen (d.h. ein geringes Gewicht, hohe Leistung COM oder CORBA) [geschlossener]

StackOverflow https://stackoverflow.com/questions/1854323

Frage

Wir entwickeln eine Anwendung, die eine Plug-in „Architektur“ hat die Verbraucher von der App zu ermöglichen, ihre eigenen proprietären Algorithmen zur Verfügung zu stellen. (Wir werden im Grunde eine Reihe von Parsern haben und erlauben Dritte ihre eigenen als auch zu schaffen)

Die Domain Raum erfordert eine sehr hohe Leistung, so out-of-Process-Bindungen werden nicht funktionieren, und wir würden lieber die Schwergewichts-Dinge wie CORBA und COM allein lassen.

Im Grunde suchen wir nach einem einfachen Cross-Plattform-Wrapper um:

  • Ladebibliothek von einem relativen Pfad
  • bieten eine Zuordnung der jeweiligen DLL / .so zu einem gewissen Konfiguration / name
  • eine Initialisierung tun und die Bibliothek abfragen, um sicherzustellen, dass sie die notwendige Funktionalität bietet

Ich denke, das ist wirklich nur eine Umhüllung um Loadlibrary () und die ausgeführten Methodenaufrufe. Das können wir uns schreiben, aber wir lieber verwenden vorhandenen Code, wie wir genug auf unserem Teller haben.

Auch hier Durchsatz und Leistung ist sehr sehr wichtig.

ähnliche Fragen sind:

Plattformübergreifender Alternative zu COM - diese ist in der Nähe, aber wir wollen in-Prozess nur - keine Notwendigkeit für außerhalb des Prozesses und unsere Bedürfnisse sind ein wenig „geringeres Gewicht“

.

C ++ Cross Platform Dynamische Bibliotheken; Linux und Windows

Dies ist für nicht verwaltete C ++ - wir können nicht .NET verwenden

EDIT - was wir gefunden

Wir fanden, dass Poco für unsere Bedürfnisse funktioniert gut. Als Bonus Diese Seite ist ein sehr geschätzter Kommentar über den Zustand der C ++ Entwicklung und die Sprachrichtung ...

Es war eine einfache Cross-Plattform-Verpackung, die wir brauchten, dass Poco bietet. Wirklich ist es ihm nicht viel, aber immer noch spart uns Zeit und Prüfung. Kein zusätzlicher Aufwand während der Laufzeit.

War es hilfreich?

Lösung 2

Ich denke, das könnte auch funktionieren: http://pocoproject.org/docs/Poco.SharedLibrary.html

Andere Tipps

Die ACE Bibliothek enthält Wrapper für dynamischen Laden von Bibliotheken, die Quer arbeiten Plattform. Wenn Sie mehr Komfort als einfache Loadlibrary wollen, dann schauen Sie sich TAO Der ACE ORB . Mit corba mit TAO ist extrem performant und die meisten Beats unwahrscheinlich, dass selbst gestalteten Plugin-Infrastruktur vor allem, wenn Sie in dem Prozess Anrufen verwenden, wie TAO sie optimiert.

Um die dynamische Bibliothek Cross-Plattform-Wrapper Verwendung verwenden ACE_DLL . Es bietet die grundlegenden Cross-Plattform-Wrapper um Loadlibrary (), die Sie genannt haben.

zwischen ACE_DLL mit und TAO unter Verwendung der Service-Konfigurations-Framework von ACE, die Sie Objekte dynamisch laden. Nach dem Laden Sie ein upcast Pointer auf das geladene Objekt zu bekommen, die Sie implementiert und jede Methode auf dem geladenen Objekt aufrufen können.

Der Code zu tun, würde wie folgt aussehen:

char const * const cpc_myClass = ACE_DYNAMIC_SERVICE_DIRECTIVE(
  "myclass",
  "dllname",
  "_make_MyClass",
  ""
);
result = ACE_Service_Config::process_directive(cpc_myClass);
MyClass * p_obj = ACE_Dynamic_Service<MyClass>::instance ("myclass");
p_obj->callAnyMethodYouLike();

Hier wird erklärt, dass TAO zwei Arten von Colocation-Optimierung (thru_poa und direkt) kennt:

  

Wenn die direkte Strategie, Methodenaufrufe über die Zusammenlegung der Objekte werden direkt Anrufe Diener ohne POA den Status zu überprüfen.

Vielleicht haben Sie erstaunt sein, wie effektiv TAO kann, wenn sie richtig verwendet werden. Ich schlage vor, ein einfaches Proof of Concept zu erstellen und tun Messungen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top