Laden...

Daten von einem Programm ins andere übertragen (bisher läufts über eine Datei)

Erstellt von Spurius vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.552 Views
S
Spurius Themenstarter:in
7 Beiträge seit 2009
vor 14 Jahren
Daten von einem Programm ins andere übertragen (bisher läufts über eine Datei)

Hallo,
ich habe ein C-Programm was mir laufen 3 Werte in einer Textdatei aktualisiert, alle 10ms, 100ms würde auch noch reichen.
Außerdem habe ich ein C#-Programm, was diese Daten alle 100ms ausliest. Leider gibts einen Fehler. Das statische Lesn und Schreiben funktioniert, nur nicht das parallele. Hat da jemand eine Lösung dafür? Bzw. welche andere Möglichkeit zum Datenaustausch zwischen den beiden Programmen besteht?
Lg

309 Beiträge seit 2008
vor 14 Jahren

Müssen das unbedigt 2 Programme sein?

Wäre es nicht möglich entweder

a) das C Programm gleich in C# neu zu schreiben

oder

b) das C Programm in eine COM DLL "umzubauen" und in C# mittels DLLImport einzubinden?

using System;class H{static string z(char[]c){string r="";for(int x=0;x<(677%666);x++)r+=c[
x];return r;}static void Main(){int[]c={798,218,229,592,232,274,813,585,229,842,275};char[]
b=new char[11];for(int p=0;p<((59%12));p++)b[p]=(char)(c[p]%121);Console.WriteLine(z(b));}}

S
Spurius Themenstarter:in
7 Beiträge seit 2009
vor 14 Jahren

Ja sollten schon 2 Programme sein. Gibts trotzdem noch Hoffnung? Muss dazusagen dass ich nocht nicht so der ganz große Experte auf diesem Gebiet bin.

309 Beiträge seit 2008
vor 14 Jahren

Dann lautet dein Stichwort Interprozesskommunikation

Mit ein bisschen Googeln findest du genügend Beispiel für C(#).

using System;class H{static string z(char[]c){string r="";for(int x=0;x<(677%666);x++)r+=c[
x];return r;}static void Main(){int[]c={798,218,229,592,232,274,813,585,229,842,275};char[]
b=new char[11];for(int p=0;p<((59%12));p++)b[p]=(char)(c[p]%121);Console.WriteLine(z(b));}}

S
21 Beiträge seit 2009
vor 14 Jahren

vielleicht hilft dir ja das: http://openbook.galileocomputing.de/visual_csharp/visual_csharp_10_003.htm ca. in der mitte, tabelle 10.4
dazu müsstest du das C# Programm zuerst starten.

309 Beiträge seit 2008
vor 14 Jahren

Bei solch hohen Aktualisierungsraten ist der Datenaustausch per Dateien (auf der Festplatte) relativ kritisch, eben weil die Datei ständig aktualisiert wird und dadurch oft durch Betriebssystem gesperrt ist. Hier ist die Interprozesskommunikation die sichere Lösung.
Hier gibt es z.B. den Ansatz das die Datei nicht auf der Festplatte gespeichert wird, sondern direkt im Arbeitsspeicher.

using System;class H{static string z(char[]c){string r="";for(int x=0;x<(677%666);x++)r+=c[
x];return r;}static void Main(){int[]c={798,218,229,592,232,274,813,585,229,842,275};char[]
b=new char[11];for(int p=0;p<((59%12));p++)b[p]=(char)(c[p]%121);Console.WriteLine(z(b));}}

S
Spurius Themenstarter:in
7 Beiträge seit 2009
vor 14 Jahren

Ihr habt mich überzeugt, ich will es mit NamedPipes versuchen. Ich verwende VS2008Prof. und irgendwie kennt das System.IO.Pipes nicht, das brauche ich aber zwingend oder? OS ist XP mit SP3.

5.742 Beiträge seit 2007
vor 14 Jahren

Hallo Spurius,

du musst IMHO eine entsprechende Assembly referenzieren.

S
Spurius Themenstarter:in
7 Beiträge seit 2009
vor 14 Jahren

Hallo,
das sagt mir jetzt gar nichts... wie geht das denn bzw nach was muss ich da suchen?
Gruß

S
Spurius Themenstarter:in
7 Beiträge seit 2009
vor 14 Jahren

Ok, habs versucht... System.IO.Pipes scheint in System.Core zu liegen, wollte da einen Verweis hinzufügen aber System.Core lässt sich nicht auswählen, es ist angegraut??

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo Spurius,

bitte beachte [Hinweis] Wie poste ich richtig? Punkt 1.1.1. Verweise hinzufügen gehört auf jeden Fall zu den Grundlagen.

herbivore