| 

.NET C# Java Javascript Exception

2
Damit kann ich wohl aus einem .NET-Programm auf eine native Bibliothek zugreifen. Aber was passiert da genau?
19.09.2011
solodor 21 3
2 Antworten
6
Den Zweck hast Du schon richtig vermutet. Was da im einzelnen genau abläuft, muss man als Entwickler zum Glück nicht in allen Details wissen, aber im Prinzip läuft ein Funktionsaufruf so: das Framework überträgt die Argumente des Funktionsausrufs in Datenstrukturen außerhalb des gemanagten Speichers. Dabei folgt es bestimmten Regeln, die am Anfang gern etwas magisch wirken und aus der Signatur der Deklaration der externen Funktion abgeleitet werden (die zu diesem Zweck auch noch mit Attributen annotiert werden kann) - das sogenannte Marshalling. Ebenso wird die Aufrufadresse der Funktion aus der Signatur hergeleitet. Dann erfolgt der Funktionsaufruf. Falls es Rückgabewerte gibt, werden die nach den gleichen Regeln wie zuvor in .NET-Objekte übertragen (Unmarshalling), und das war es dann auch schon.

Zu Details:
http://msdn.microsoft.com/en-us/library/aa446536.aspx
Calling Win32 DLLs in C# with P/Invoke

Und bei der Verwendung von P/Invoke sehr nützlich:
pinvoke.net

Solange das Marshalling mit den deklarativen Ausdrucksmöglichkeiten und den vorgegebenen Regeln im Griff zu behalten ist, funktioniert das wunderbar. Wenn die Datenstrukturen zu kompliziert werden oder evtl. auch ein Zustand im Spiel ist, der ständig zwischen managed und unmanaged code zu übertragen ist, kommt als Alternative in Betracht, sich selbst eine Mittler-Schicht in C++ zu bauen - da kannst Du im gleichen Code verwaltete und nicht-verwaltete Datenstrukturen manipulieren und damit Die Aufrufe "von Hand", aber eben auch mit allen Einflussmöglichkeiten übersetzen.
19.09.2011
Matthias Hlawatsch 13,2k 4 9
Respekt! Kenne kaum jemanden der sich mit P/Invoke bzw Marshalling so auseinandergesetzt hat und es verständlich erklären kann. Musste einfach mal raus, weiter so! :-)
Dustin Klein 20.09.2011
Dankeschön :-)
Matthias Hlawatsch 21.09.2011
-2
Ja, du vermutest richtig.

Es wird das passieren, was du aus der API aufrufst.
19.09.2011
nabuchodonossor 1,3k 5

Stelle deine Com-Frage jetzt!