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
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));}}
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.
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));}}
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.
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));}}
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.
Hallo Spurius,
du musst IMHO eine entsprechende Assembly referenzieren.
Hallo,
das sagt mir jetzt gar nichts... wie geht das denn bzw nach was muss ich da suchen?
Gruß
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??
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