.Net Interoperabilität

Ähnliche Dokumente
Einheitliches Typsystem

Typsystem Plattform- und Sprachenunabhängigkeit in.net

C# im Vergleich zu Java

Kapitel 21 Nativer Code

Vorkurs Informatik WiSe 16/17

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Kapitel 3 Das Typsystem von C#

Vorkurs Informatik WiSe 17/18

Kapitel 3 Das Typsystem von C#

Geschrieben von: Kristian Freitag, den 05. Mai 2006 um 18:50 Uhr - Aktualisiert Freitag, den 04. Mai 2012 um 19:33 Uhr

Grundlagen der OO- Programmierung in C#

Einstieg in die Informatik mit Java

Einfache Arrays. Dr. Philipp Wendler. Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung

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

Ein erstes Java-Programm

Informatik Vorkurs - Vorlesung 2

Informatik II Übung 5

Software Entwicklung 1

Variablen. int Flugzeug. float. I write code Hund. String. long. Borchers: Programmierung für Alle (Java), WS 06/07 Kapitel

Kapitel 21 Nativer Code

Informatik II. Woche 15, Giuseppe Accaputo

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Grundlagen von C# - 1

C# Programmierung. Eine Einführung in das.net Framework. C# Programmierung - Tag 2: Einstieg in die OOP

Einführung in C. Alexander Batoulis. 5. Mai Fakutltät IV Technische Universität Berlin

Grundlagen der Informatik 11. Zeiger

Programmieren in Java -Eingangstest-

Einführung Sprachfeatures Hinweise, Tipps und Styleguide Informationen. Einführung in C. Patrick Schulz

Einführung in die Programmiersprache C

Einführung in C#.NET. 1 Übersicht. 2 Typen (Types) Dieser Artikel stammt aus dem Magazin von C++.de (

Tag 8 Repetitorium Informatik (Java)

Einleitung. Informationsquellen: - Webseite zur Vorlesung, Abschnitt Informationen zu C und C++ Kurzeinführung in C/C++

Computeranwendung und Programmierung (CuP)

Teil 6: Strukturen und Unionen Gliederung

3.8 Objekttypen und Arrays. Wir werden uns in diesem Kapitel näher mit den Objekttypen in Java beschäftigen.

Informatik II Übung 05. Benjamin Hepp 3 April 2017

Übersicht. Vorstellung des OO-Paradigmas

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Basiswissen in Informatik

II. Grundlagen der Programmierung. Beispiel: Merge Sort. Beispiel: Merge Sort (Forts. ) Beispiel: Merge Sort (Forts. )

Grundlagen von JAVA Hello World in JAVA Elementare Datentypen. Grundlagen von JAVA Hello World in JAVA Elementare Datentypen

Schwerpunkte. 10. Felder (Arrays) Grundprinzip von Arrays. Klassifikation von Typen in Programmiersprachen

Repetitorium Programmieren I + II

Grundlagen von JAVA Hello World in JAVA Elementare Datentypen. Grundlagen von JAVA Hello World in JAVA Elementare Datentypen

C++ vs. Java. Hello world! Java C++ class HelloWorld { static public void main(string args) { System.out.println("Hello World!

Sprachkonstrukte Verzweigungen und Array-Strukturen

Programmieren in C. Speicher anfordern, Unions und Bitfelder. Prof. Dr. Nikolaus Wulff

Einstieg in die Informatik mit Java

Einführung in C. EDV1-04C-Einführung 1

EINI LW. Einführung in die Informatik für Naturwissenschaftler und Ingenieure Vorlesung 2 SWS WS 15/16

Kurzeinführung in C/C++ Informationsquellen: - Webseite zur Vorlesung, Abschnitt Informationen zu C und C++ Einleitung

Java Datentypen und Variablen

Programmierkurs C++ Variablen und Datentypen

Java Einführung Klassendefinitionen

parallele Prozesse auf sequenziellen Prozessoren Ein Process ist ein typisches Programm, mit eigenem Addressraum im Speicher.

Unicode Support Atomic Operations Thread Support Type-Generic Makros Sicherheit Ease-of-Use C11. Thomas Duckardt

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Informatik II - Tutorium 5

00-Wiederholung WIEDERHOLUNG. Programmierkonzepte und Java. Peter Vischer Schule Nürnberg. KW Donnerstag, 22.

Einführung in C# /.NET. Dr. Beatrice Amrhein

Einleitung Grundlagen Erweiterte Grundlagen Zusammenfassung Literatur. C: Funktionen. Philip Gawehn

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Dynamischer Speicher

Variablen und Parameter

4 Objektorientierte Programmierung mit Java 4.1 Java-Grundlagen

Vorwort zur zweiten Auflage 1. Vorwort zur ersten Auflage 2

Programmieren in Java

Teil 5 - Java. Programmstruktur Operatoren Schlüsselwörter Datentypen

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Informatik I (D-MAVT)

Informatik II (D-ITET) Informatik II (D-ITET) Übungsstunde 1. Distributed Systems Group, ETH Zürich

Einführung in die Programmiersprache C

Objektorientierung. Klassen und Objekte. Dr. Beatrice Amrhein

Einführung in die Programmierung

Short Introduction to C# C# (C SHARP) Microsofts Antwort auf Java

Programmieren in Java

Java Einführung Collections

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

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

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Spieleentwicklung. Diane Hanke, Okan Danyeli & Toni Wirth

Sprachvergleich C# / Java / C++

Einführung in Java. Ausgewählte Quellen zu Java

Hello World. Javakurs 2014, 1. Vorlesung. Sebastian Schuck. basierend auf der Vorlage von Arne Kappen. wiki.freitagsrunde.org. 3.

Informatik 1 ( ) D-MAVT F2011. Pointer, Structs. Yves Brise Übungsstunde 6

10. Felder (Arrays) Teil 2. Java-Beispiele: Echo.java Primzahlen.java Monate.java. K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

Einführung in die Programmiersprache C#

Teil 6: Strukturen und Unionen Gliederung

im Rahmen des Seminars - Programmiersprachen Markus Nestvogel

Kapitel 3 Einführung in C#

Informatik I (D-ITET)

Einstieg in die Informatik mit Java

Algorithmen und Datenstrukturen 01

Stack stack = new Stack(); stack.push ("Würstchen"); string s = (string) stack.pop(); Console.WriteLine (s);

AuD-Tafelübung T-B5b

Beispiel: die Klasse Brüche

PROCESSING EINE ZUSAMMENFASSUNG. Created by Michael Kirsch & Beat Rossmy

Grundlagen der Informatik 0

Transkript:

.Net Interoperabilität Objektorientiertes Programmieren mit.net und C# Thomas Hörmann Institut für Informatik Software & Systems Engineering

Agenda Einleitung P/Invoke Marshalling Component Object Model (COM) Fazit 2

Wieso Interop? Zugriff auf Betriebssystem Funktionen Bibliotheken Dritter verwenden Legacy Code verwenden Beispiele: Windows 7 Glass Windows Taskleiste GTK Hochperformanter nativer Code 3

Überblick 4

P/Invoke 5

DllImport [DllImport("user32")] public extern static int MessageBox( int hwnd, String m, String c, int flags); [DllImport("user32.dll", EntryPoint="MessageBoxW", CallingConvention=CallingConvention.StdCall, ExactSpelling=true)] public extern static uint MessageBox2( IntPtr hwnd, String m, String c, uint flags); 6

Fehlerquellen DllNotFoundException EntryPointNotFoundException PInvokeStackInvallanceException AccessViolationException DivisionByZeroException 7

Marshalling 8

Werttypen Typ Bereich Größe sbyte -128 bis 127 Ganze 8-Bit-Zahl byte 0 bis 255 Ganze 8-Bit-Zahl char U+0000 bis U+ffff 16-Bit-Unicode-Zeichen short -32.768 bis 32.767 Ganze 16-Bit-Zahl ushort 0 bis 65.535 Ganze 16-Bit-Zahl int -2.147.483.648 bis 2.147.483.647 Ganze 32-Bit-Zahl uint 0 bis 4.294.967.295 Vorzeichenlose 32-Bit- Ganzzahl long -9 * 10^18 bis 9 * 10^18 64-Bit-Ganzzahl ulong 0 bis 18 * 10^18 Vorzeichenlose 64-Bit- Ganzzahl 9

MarshalAs [DllImport("someDll.dll")] public static extern void DoIt( [MarshalAs(UnmanagedType.Bool)] int i1, [MarshalAs(UnmanagedType.U4)] int i2, [MarshalAs(UnmanagedType.LPStr)] String s1); 10

Arrays [DllImport("someDll.dll")] public static extern void doarray(point[] myarray); 11

Strings [DllImport("someDll.dll")] public static extern void dostring(string mystring); 12

Strings (2) Probleme mit Strings: Strings sind nicht veränderbare Objekte Zeichenkodierung Lösung: StringBuilder Char Array MarshalAs CharSet [DllImport("user32.dll", CharSet = CharSet.Ansi)] public extern static uint MessageBoxA( int hwnd, String m, String c, uint flags); 13

Strukturen [StructLayout(LayoutKind.Sequential)] public struct POINT { public int X; public int Y; } [DllImport("someDll.dll")] public static extern void dostruct(point p); Strukturen sind Werttypen X und Y kommen auf den Stack 14

Strukturen [StructLayout(LayoutKind.Sequential)] public struct POINT { public int X; public int Y; } [DllImport("someDll.dll")] public static extern void dostruct(point p); [DllImport("someDll.dll")] public static extern void dostruct(int X, int Y); 15

Klassen [StructLayout(LayoutKind.Sequential)] public class Point { public int X; public int Y; } [DllImport("someDll.dll")] public static extern void dostructref(point p); [DllImport("someDll.dll")] public static extern void dostructref(ref POINT p); 16

MarshalByRef [DllImport("dwmapi.dll", PreserveSig = false)] public static extern void DwmExtendFrameIntoClientArea (IntPtr hwnd, ref MARGINS margins); Fenster Thread Handling (Timer, Mutex) IO Streams Datenbank Verbindungen 17

Funktionspointer [StructLayout(LayoutKind.Sequential)] public class Point { public int X; public int Y; public void add(int X, int Y) { this.x += X; this.y += Y; } } 18

Funktionspointer (2) public delegate void addpoint(int X, int Y); [DllImport("someDll.dll")] public static extern void sendpointer(addpoint mydelegate); static void Main() { Point mypoint = new Point(); addpoint mydelegate = mypoint.add; sendpointer(mydelegate); } 19

Component Object Model 20

Component Object Model IUnknown IDispatch 21

Beispiel 22

Fazit + Einfacher Zugriff auf externe Bibliotheken + Einheitliche Schnittstelle + Volle Kontrolle über verwalteten Heap + Verwaltung von COM Objekten - Keine Optimierung zur Laufzeit möglich - Schlechte Laufzeit bei vielen Zugriffen - Benötigt mehr Speicher - Eingeschränkter Zugriff von außen 23

Vielen Dank für Ihre Aufmerksamkeit 24