Forum: PC-Programmierung C# Memory an Exe als Paramter übergeben


von Thorsten (Gast)


Lesenswert?

Hallo und ein frohes neues Jahr,

ich wollte mal fragen, ob Ihr eine Möglichkeit kennt an eine exe Datei 
als Parameter ein Speicherbereich zu übergeben.

Die Exedatei möchte gerne als Übergabeparameter eine PNG Datei haben und 
die PNG Datei liegt schon als Bytearray in meinem Programm vor.

Ich möchte mir das Abspeichern auf der Festplatte gerne einsparen, indem 
ich die Daten direkt vom Speicher aus an die Exe Datei übergeben kann.

Geht sowas?

von Peter II (Gast)


Lesenswert?

Thorsten schrieb:
> Ich möchte mir das Abspeichern auf der Festplatte gerne einsparen, indem
> ich die Daten direkt vom Speicher aus an die Exe Datei übergeben kann.

man könnte sie als einfach als Stream im stdin übergeben. Oder als 
Shared Memory.

siehe https://de.wikipedia.org/wiki/Interprozesskommunikation

von Helfersyndrom (Gast)


Lesenswert?

Ja.
Als Einstieg: 
https://msdn.microsoft.com/de-de/library/windows/desktop/aa366551%28v=vs.85%29.aspx

Allerdings gibt es das soweit ich weiß nicht als .net-Bibliothek.

von DasSchlimmsteKommtNoch (Gast)


Lesenswert?


von Thorsten (Gast)


Lesenswert?

Super, Vielen Dank. Sharedmemory war mir nicht bekannt.

von c-hater (Gast)


Lesenswert?

Thorsten schrieb:

> ich wollte mal fragen, ob Ihr eine Möglichkeit kennt an eine exe Datei
> als Parameter ein Speicherbereich zu übergeben.

Ja, sogar mehrere. Letztlich ist das nämlich nur eine ganz normale 
IPC(*)-Anwendung. Man benutzt dazu unter Windows genau die 
Schnittstellen, die das Windows-API für IPC bereitstellt.

(*) IPC=inter-process communication

Es gibt (mindestens) folgende Möglichkeiten:

-WM_COPYDATA-Windows-Message
-Shared memory
-Memory mapped files
-Named pipes
-Mailslots

Wenn .net in's Spiel kommt, muß man zusätzlich leider hochineffizent 
Speicherinhalte zwischen "verwaltetem" und nichtverwaltetem Speicher 
hin- und herkopieren. Methoden, die das leisten, stellt die Klasse 
System.Runtime.InteropServices.Marshal bereit. Auch die zur Anbindung 
der Win32-API-Funktionen nötigen .net-Sprachfeatures werden über den 
Interop-Namespace bereitgestellt.

RTFM

von Thorsten (Gast)


Lesenswert?

Hallo, ich musste meine Prioritäten vom Programm etwas verschieben, 
deshalb kam ich nicht dazu. Ich benutze die Android Debug Bridge um mit 
meinem Handy zu kommunizieren bzw. Applicationen zu testen, dazu rufe 
ich in meinem C# Programm die Executable adb.exe mit dem Parameter für 
ein Shell auf "adb.exe -s myhandy shell, danach befinde ich mich in der 
Console auf dem Mobiltelefon, soweit so gut. Nun kann ich Daten über 
stdout und Stdin direkt an die Console senden. Ich bin immer noch etwas 
wackelig mit der OOP und frage mich, wie lange mein Process gültig ist. 
Kann ich jetzt aus jeder Methode heraus auf den Process zugreifen? Oder 
verliert die Instance Ihre Gültigkeit, nachdem ich aus der Methode zum 
Aufruf der Instance verlassen hab?

von Thorsten (Gast)


Lesenswert?

Ich könnte natürlich die Methode etc. als static deklarien, aber wie ich 
gelernt hab vermeidet man dieses in der OOP.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.