Beleg: API für Plugin und Treiberbasierte Softwareentwicklung

Ähnliche Dokumente
Großer Beleg. API für Plugin und Treiber basierte Softwareentwicklung

- dynamisches Laden -

Einführung in die Systemprogrammierung

Kapitel 21 Nativer Code

Microsoft.NET Framework & Component Object Model. ein Vortrag von Florian Steuber

C# Programmierung. Eine Einführung in das.net Framework. C# Programmierung - Tag 8: Professionelle Entwicklung

Maschinencode Dateiformat und Stackframes

Kapitel 21 Nativer Code

4. AUFLAGE. Praxiswissen TYP03. Robert Meyer mit Olaf Clemens. O'REILLY* Beijing Cambridge Farnham Köln Sebastopol Taipei Tokyo

Xcalibur-2 Alpha. Time. Christian Rempis University of Applied Sciences Bonn-Rhein-Sieg 17. Januar

.Net Interoperabilität

OOP. Kapselung: Gruppierung von Daten und Funktionen als Objekte. Definieren eine Schnittstelle zu diesen Objekten.

Einführung in C# Teil 1. Matthias Nübling

Eine Kommando-Oberfläche für.net

Karim El Jed, Lars Keller netcreate OHG. VSTO in der Praxis

GNU/Hurd. ... ein Mach basiertes Multi Server Betriebssystem. Manuel Gorius. . p.1/33

Bibliotheks-basierte Virtualisierung

Klassen als Objekte. Smalltalk vs. Objective-C. Self-Nachrichten an Klassen in Objective-C. Klassen als Objekte. Smalltalk: Everything is an object

3DVBVIEW - DX11Engine Version 1.1 (ab Build-Version 1054.Stand April 2018)

Computeranwendung in der Chemie Informatik für Chemiker(innen) 3. Software

Wie teuer ist dynamischer Polymorphismus? 194

C programmieren. Jürgen Wolf

Software-Engineering für langlebige Systeme

~±] Inhalt. 1.1 Ähnlichkeiten zwischen C# und Java Unterschiede zwischen C# und Java Das.NET-Framework 4 1.

Von ULTRIX zu Linux Die Portierung des Administrators

Konzepte von Betriebssystem-Komponenten. Programmstart & dynamische Bibliotheken SS 05. Wladislaw Eckhardt.

Cross-Platform Apps mit HTML5/JS/CSS/PhoneGap

Mapra: C++ Teil 4. Felix Gruber. 6. Mai IGPM, RWTH Aachen. Felix Gruber (IGPM, RWTH Aachen) Mapra: C++ Teil 4 6.

Objektorientierte Programmierung II

Was gehört (nicht) ins SVN?

Informatik. Pointer (Dynamisch) Vorlesung. 17. Dezember 2018 SoSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 1

Zwischenvortrag zum Entwicklungsstand der Bachelor-Arbeit. Direct 3D-Output für ein Rendering Framework

TwinCAT HMI Application

Kinmatec. Einfach erfahren.

Konzepte von Betriebssystem-Komponenten. Programmstart & dynamische Bibliotheken SS 05. Wladislaw Eckhardt.

Mathematik Seminar WS 2003: Simulation und Bildanalyse mit Java. Software-Architektur basierend auf dem Plug-in-Konzept

Andreas Kosch. Software & Support $ > Verlag GmbH

Microsoft.NET Framework

Programmieren in Lua

Entwurf und Implementierung einer generischen Backend-Infrastruktur für den Prozessimulator DUPSIM

Office und.net - zwei Welten wachsen zusammen mit VSTO 3.0. Lars Keller netcreate OHG

Kurzfassung der Studienarbeit

Realtime Daten-Rückschreibung in Tableau mit der Extensions API //

Virtueller Campus. Virtueller Campus Horw mit interaktiver Steuerung. HowTo: Externe Bibliotheken

M. Biebl. 15. Mai Hochschule München Fakultät für Informatik/Mathematik Fach: Clojure. Clojure - Java Interoperabilität. M. Biebl.

Python - Open-Source-Werkzeuge für Wissenschaftler und Ingenieure

VSTO Was gibt es Neues in der Office Entwicklung? Lars Keller netcreate OHG

Objektorientiert in C++

Enterprise PHP Tools

Vorlesung Datenstrukturen

Das Interface-Konzept am Beispiel der Sprache Java

2.1 Visual C Express installieren Visual C Express starten Visual C Express registrieren...

Software Design basierend auf dem Plug-In Konzept

Java-Grundkurs für Wirtschaftsinformatiker

Objektorientierung II

Wesentliche Ideen und Komponenten der V13 V13 Under the Hood die Technik dahinter

Dies ist der zweite Artikel einer Serie über Electron.

Programmierkurs C++ Templates & STL (1/2)

Eine praktische Einführung in die Programmierung mit der Programmiersprache C

16- und 32 Bit DLL. Datentypen String Integer. STLB-Bau. STLB-Bau

360.NET. Jan Schenk Developer Evangelist Web/Live Microsoft Deutschland

Konzepte von Betriebssystemkomponenten

Virtual Machines unter der Haube

Integrierte Editoren in Plone

Whitepaper. Produkt: List & Label. Thema: Eine Übersicht der Einbindungsmöglichkeiten. combit GmbH Untere Laube Konstanz

Sequentielle Programm- / Funktionsausführung innerhalb eines Prozesses ( thread = Ausführungsfaden )

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur

CUDA. Moritz Wild, Jan-Hugo Lupp. Seminar Multi-Core Architectures and Programming. Friedrich-Alexander-Universität Erlangen-Nürnberg

MICROSOFT.NET: EINE NEUE ENTWICKLUNGSPLATTFORM AUCH FÜR NUMERISCHE PROBLEME?

Informatik II SS Inhalt. Objektlebensdauer (2/3) Objektlebensdauer (1/3)

Modulare Anwendungen und die Lookup API. Geertjan Wielenga NetBeans Team Deutschsprachige Überarbeitung, Aljoscha Rittner NetBeans Dream Team

STORYBOARDING ZUR ABLEITUNG VON KONTEXTBASIERTEN INTERACTION-CASES FÜR UBIQUITÄRE SYSTEME

Hydroinformatik I: Referenzen und Zeiger

Threads. Netzwerk - Programmierung. Alexander Sczyrba Jan Krüger

LAZARUS. von Michael Van Canneyt, Mattias Gärtner, Swen Heinig, Felipe Monteiro de Carvalho, Inoussa Ouedraogo und Jörg Braun

Schnelles Prototyping für die medizinische Bildverarbeitung

C++ - Variablen: Gültigkeit - Sichtbarkeit

Erweiterte Interaktion mit Trees und Charts in APEX

Bootvorgang des DSM-Systems Systems Plurix

2 Wegweiser Projektbeschreibung...69

Informatik II Übung 4 Gruppe 7

Aufbau eines modernen Betriebssystems (Windows NT 5.0)

2.13 Vererbung. Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/ Article

10. OLAPLINE-Anwendertreffen

Firmenkursprogramm für Superbase-Entwickler Ausgabe 01 / 06

Zweck: sequentieller Zugriff auf Elemente eines Aggregats. mehrere Abarbeitungen des Aggregatinhalts

Bestandsaufnahme und Arbeit an einer Alpha-Version des Saros- Plugins für die IntelliJ-Plattform

Namespaces und Assemblies

Zweck: sequentieller Zugriff auf Elemente eines Aggregats

INHALT. Vorwort 13. Kapitel 1 Die Architektur von Lazarus 15

Migration der Datenbankzugriffsschnittstelle in Client-/Server-Systemen

Authentifizierung und Autorisierung in Kubernetes

Mapra: C++ Teil 6. Felix Gruber, Sven Groß. IGPM, RWTH Aachen. 13. Juni 2017

Java-Grundkurs für rtschaftsinformatiker

Komponentenorientierte Software-Entwicklung. Seite 1 / 42

Domino und PHP EC 2013 Track 2 Session 7

Erlangen von Administrator-Privilegien unter Microsoft Windows NT 4.0 durch Ausnutzung einer Sicherheitslücke im Systemcache

Feature-Überblick: Vista Toolkit

Guile Die Erweiterungssprache des GNU-Projekts

DAP2-Programmierpraktikum Einführung in C++ (Teil 2)

Transkript:

Fakultät Informatik Institut für Software- und Multimediatechnik, Professur Computergraphik Beleg: API für Plugin und Treiberbasierte Dresden, 23. Mai 2007

Übersicht Grundlagen zum Plugin-Konzept Dynamische Bibliotheken Die Native C++ Plugin API Schnittstellen Plugins laden Plugins schreiben Plugins verwenden Umsetzung auf die.net Umgebung Ausblick 2

Grundlagen zum Plugin-Konzept Schnittstellen: global definiert von Plugin und Anwendung unabhängig 3

Grundlagen zum Plugin-Konzept Hostanwendung: stellt Grundfunktionalität bereit lädt Plugins zur Laufzeit Beschränkung auf bestimmte Plugintypen (bei Kompilierung) 4

Grundlagen zum Plugin-Konzept Plugins: Funktionen zur Erweiterung der Hostanwendung Schnittstellen für Interaktion mit Hostanwendung in dynamische Bibliotheken verpackt 5

Dynamische Bibliotheken Bibliothek nur einmal im Speicher statische Daten eingeblendet Kopien veränderlicher Daten im Prozessspeicher (Heap/Stack) angelegt keinen Zugriff auf Code der Bibliothek kein IPC mit Variablen der Bibliothek 6

Dynamische Bibliotheken dynamisches Linken: Bibliothek durch Systemfunktionen an Programm gebunden Laden der Bibliothek Suchen nach Funktionsadressen Freigeben der Bibliothek 7

Dynamische Bibliotheken (Win32) DLL sind dynamische Bibliotheken in Win32 Betriebssytemen Win32 Funktionen: LoadLibrary() lädt eine DLL GetProcAddress() gibt Zeiger mit Funktionsadresse zurück FreeLibrary() entlädt DLL laden/entladen in DllMain() der Bibliothek signalisiert 8

Dynamische Bibliotheken (Linux) shared objects (*.so) sind dynamische Bibliotheken in Linux Linux Funktionen: dlopen() lädt ein shared object dlsym() gibt Zeiger mit Funktionsadresse zurück dlclose() entlädt ein shared object laden in _init() der Bibliothek signalisiert entladen in _fini() der Bibliothek signalisiert 9

Die Native C++ Plugin API drei Teile: 10

Die Native C++ Plugin API in C++ geschrieben (Standardbibliothek) Verwendung statischer Bibliotheken API nur zum Kompilieren nötig mit VS2005 und GNU C++ kompilierbar (Windows/Linux) plattformabhängige Teile in CrossPlattform.h und CrossPlattform.cpp 11

Die Native C++ Plugin API 12

Schnittstellen 13

Plugins laden plugin_loader in Hostanwendung einbinden verwaltet Plugins selbständig (inkl. Aufruf der Destruktoren) Systemfunktionen zum Laden/Entfernen von Bibliotheken im Objekt gekapselt zum Laden können notwendige Schnittstellen fesgelegt werden Zugriff auf Plugins über Index möglich 14

Plugins schreiben Plugins in dynamischen Bibliotheken globale Fabrikliste (plugin_factory_list_class) Liste im Einsprungpunkt der Bibliothek (DllMain/_init) mit Fabriken gefüllt zu jedem Plugin eine Fabrik Plugin erbt von Fabrik gleiche Schnittstellen Fabrik kann Plugin erstellen (create_new_instance() von iplugin_base) C -Funktion get_plugin_factory_list() 15

Plugins verwenden Plugins werden über deren Schnittstellen angesprochen standard: iplugin_base Konvertierung über dynamic_cast (Typreflektion mit vtbl) 16

Umsetzung auf die.net Umgebung Anwendungsfälle: Hostanwendung C++ C++.NET.NET Plugin C++.NET C++.NET mindestens zwei Lade-Klassen (.NET und C++ plugin_loader) Idee: um jeweilige Interop-Funktion erweitern mindestens zwei Schnittstellendefinition (.NET und C++).NET-.NET Anwendungsfall einfach und effizient lösbar (Reflection von Assemblies) 17

Umsetzung auf die.net Umgebung - Probleme C++ Hostanwendung und.net Plugins: Interoperabilität mit managed Code Hostanwendung in C++ mit Managed Extensions (C++/CLI) Probleme: eigene Kommunikationswege zwischen native und managed Code (Wrapperklassen usw.) eigene Version der Lade-Klasse (sonst immer C++/CLI notwendig) 18

Umsetzung auf die.net Umgebung - Probleme.NET Hostanwendung und C++ Plugins Interoperabilität mit native Code gute Zusammenarbeit mit COM (COM Interop Assembly) Platform Invoke für Code ohne COM (P/Invoke) Probleme: Marshaling von C++ Objekten nicht möglich (nur Datenstrukturen) Wrapperklassen innerhalb der Plugins (C++/CLI) 19

Umsetzung auf die.net Umgebung - Ergebnis zwei getrennte Plugin API-Versionen gleiche vordefinierte Schnittstellen jeweils eine plugin_loader Klasse Hostanwendungen kümmern sich um Interoperabilität (nicht die Lade-Klassen) Hostanwendung kennt Plugintypen (einfaches Marshaling / Wrappen) integrieren beider plugin_loader ermöglicht flexibles Laden von.net und C++ Plugins 20

Ausblick erweitern der Schnittstellen Sound Datenkanäle seq. Datenströme (z. B. für Video En-/Dekodierung) usw. eventuell Versionssystem für Plugins (bzw. deren Schnittstellen) integrieren Mechanismus zum Erkennen von Plugin-Bibliotheken (ohne Bibliothek zu laden) 21

Ausblick plugin_loader an Bedürfnisse anpassen komfortable Lade-Funktionen (verschiedene Ladebedingungen) angabe eines Plugin-Verzeichnisses (autom. Laden aller Plugins) usw. Verbesserung der Registrierung der Fabriken (automatisieren) 22