Laden...
C
crueger myCSharp.de - Member
Schweiz/Deutschland Dabei seit 03.06.2008 34 Beiträge
Benutzerbeschreibung

Forenbeiträge von crueger Ingesamt 34 Beiträge

09.07.2008 - 09:30 Uhr

Der Beitrag ist zwar schon etwas älter aber probiers mal mit sport.Readline();

mfg
crueger

01.07.2008 - 12:24 Uhr

Ja dacht ich mir auch das das eigentlich funktionieren müsste aber leider tuts das nicht, und ne idee woran das noch liegen könnte hab ich nicht wirklich mehr.

Kann es vll sein das er den Datentyp ViInt64 nicht versteht, weil er den ja nicht umsetzen konnte?

//TODO: Function Panel type with id: 1015 and name: "viint64" could not be resolved; Type will be treated as System.Int32.

Ich hab diesen dann einfach in der Struktur mit einem long ersetzt der auch 64 Bit hat. Da die enzahl der samples ja nicht negativ sein kann bei einem abgetastetem Signal hab ich es mit einem ulong versucht aber auch das hat nicht gefunzt.

Frage:muss man den Datentyp dann noch explizit definieren und sagen das es sich bei einem ViInt64 um einen long (Int64) handelt? Was ich mir aber nicht so richtig vorstellen kann weil die Speicherplatz belegung ja dieselbe bleibt nach der Struktur definition

EDIT: Habs nochmal getestet mit ref und jetzt hatts bei einer uebergabe mit ref sogar eine Fehlermeldung.

Problem in CLR. May Stack Overflow.

Das würde ja bedeuten das die Speicherplatzreservierung nicht funktionieren würde.

01.07.2008 - 11:31 Uhr

Hallo zusammen.

Ich habe da wieder ein Problem gleicher Natur wie in meinen vorigen Post. Es handelt sich um die gleiche Funktion nur um ein anderes Feld.

Zur Erinnerung: es handelt sich um diese Funktion:

niRFSA_ReadIQSingleRecordComplexF64(
   ViSession vi, 
   ViConstString channelList, 
   ViReal64 timeout, 
   NIComplexNumber* data,
   ViInt64 dataArraySize, 
   niRFSA_wfmInfo* wfmInfo);

Dies ist die funktion aus der Dll library welche im headerfile so definiert ist.

Das Feld NIComplexNumber* data konnte ich dank Svenson schon erfolgreich manuell umsetzen jedoch funktioniert das umsetzen des 2ten Feldes niRFSA_wfmInfo* wfmInfo nicht.

Dtruktur in C++ sieht folgendermassen aus:

define _niRFSA_wfmInfo

#pragma pack(push,8)
typedef struct niRFSA_wfmInfo_struct
{
   ViReal64 absoluteInitialX;
   ViReal64 relativeInitialX;
   ViReal64 xIncrement;
   ViInt64 actualSamples;
   ViReal64 offset;
   ViReal64 gain;
   ViReal64 reserved1;
   ViReal64 reserved2;
} niRFSA_wfmInfo;
#pragma pack(pop)

Umgesetzt hab ich sie folgendermassen:

[StructLayout(LayoutKind.Sequential)]
        public struct niRFSA_wfmInfo_struct
        {
            public double absoluteInitialX;
            public double relativeInitialX;
            public double xIncrement; 
            public long   actualSamples;
            public double offset;
            public double gain;
            public double reserved1;
            public double reserved2;
         }

Das Problem welches ich habe ist das Dort Inforamtionen über das ankommende Signal drinne stehen müssten, dies jedoch aber nicht der fall ist. Fehlermeldung gibts keine,lediglich die Felder bleiben leer. Deswegen denke ich ists das gleiche Problem wie bei der anderen Funktion bezüglich einer Referenz bzw. wie die Daten gemarshallt werden. Habe es mit einer _ref _auf die Struktur und einem [In,Out] versucht jedoch erfolglos.

Kann mir da jemand weiterhelfen und sieht eventl. das Problem??

27.06.2008 - 13:12 Uhr

Danke für die Lösung. Ich hatte vorher es nur mit dem out probiert,das die Argumente als Verweis auf die Struktur übergeben werden, welches aber eben so wenig wie ref funktionierte.

Aber im nachhinein ist deine lösung natürlich auch logisch da wie du schon sagtest die Bytes in das Feld zurück gemarshallt werden.

EDIT: Um deine Frage noch zu beantworten: Ja die APIs sind von NAtional Instruments. Sie bieten auch einen .NET Wrapper an den ich auch nutze aber eben diese und noch 2 andere Strukturen setzt der wrapper nicht um, warum auch immer:

Hier die nicht umgesetzten Typen:

// TODO: Function Panel type with id: 1016 and name: "nicomplexnumber" could not be resolved; Type will be treated as System.Int32.
// TODO: Function Panel type with id: 1013 and name: "nirfsa_wfminfo" could not be resolved; Type will be treated as System.Int32.
// TODO: Function Panel type with id: 1014 and name: "nirfsa_spectruminfo" could not be resolved; Type will be treated as System.Int32.
// TODO: Function Panel type with id: 1015 and name: "viint64" could not be resolved; Type will be treated as System.Int32.
// TODO: Function Panel type with id: 1018 and name: "smtspectruminfo" could not be resolved; Type will be treated as System.Int32.

Allerdings verstehe ich auch nicht warum die Firma einen Wrapper heraus bringt der nicht alle Typen umsetzen kann, das ist meiner meinung nach wie ein Auto auf den Markt bringen und dann sagen, Achso lenken kann man aber nicht.

Anyway. Vielen dank nochmal.

27.06.2008 - 12:47 Uhr

Hi Svenson,

Erstmal entschuldigung, ich habe dir ausversehen die falsche Funktion gegeben. Die richtige waäre diese:

niRFSA_ReadIQSingleRecordComplexF64(
   ViSession vi, 
   ViConstString channelList, 
   ViReal64 timeout, 
   NIComplexNumber* data,
   ViInt64 dataArraySize, 
   niRFSA_wfmInfo* wfmInfo);

Aber nichts destotrotz hast du recht gehabt mit dem [In,Out]. Es hat funktioniert.

Vielen, vielen Dank an dich. Hast mir echt den Tag und das WE noch gerettet.

27.06.2008 - 12:33 Uhr

Hallo Sharpie.

Das mehrdimensionale array ist dieses:

int[,] cArray;

hier ein 2 dimensionales array. Je nach dem wie gross(dimension) dein array ist, sind die dimensionen durch kommata getrennt.

27.06.2008 - 11:15 Uhr

Ich kann nicht erkennen, wie dabei die Struktur ihre Größe verändert. Du hast du ein Feld mit veränderlicher Größe aber festem Inhalt.

ja da habe ich mich etwas falsch ausgedrückt aber meinte es so wie du es sagtest.

Also in C++ sieht das ganze so aus:

niRFSA_FetchIQSingleRecordComplexF64(
   ViSession vi, 
   ViConstString channelList, 
   ViInt64 recordNumber, 
   ViInt64 numberOfSamples, 
   ViReal64 timeout, 
   NIComplexNumber* data,
   niRFSA_wfmInfo* wfmInfo);

Per Dll Import sieht die Funktion bei mir so aus:

[DllImport("niRFSA.dll", EntryPoint = "niRFSA_ReadIQSingleRecordComplexF64", CallingConvention = CallingConvention.StdCall)]
public static extern int ReadIQSingleRecordComplexF64(System.IntPtr Instrument_Handle, string Channel_List, double Timeout,  measurev2.read_IQ_data.NIComplexNumber_struct[] Data, int Data_Array_Size, ref measurev2.read_IQ_data.niRFSA_wfmInfo_struct Waveform_Info);

measurev2.read_IQ_data.NIComplexNumber_struct[] ist der Verweis auf die Klasse wo sich die Struktur befindet. Per ref funktioniert das ganze nicht wie ich schon getestet habe im gegensatz zur anderen Struktur Waveform_Info welche einwandfrei funktioniert.

Wie ich die Struktur umgesetzt habe, hab ich ja schon beschrieben.
Die Daten sollen nun zur Laufzeit dort hineingeschrieben werden, wie svenson schon sagte in das Feld mit veränderlicher groesse nur schaut man in das Feld hinein sind die Daten stets 0.0.

27.06.2008 - 09:59 Uhr

Hallo. Ich habe so ziemlich ein Problem gleicher Art deswegen dachte ich poste ich das gleich mal hier bevor ich einen neuen Thread starte.

Ich habe auch eine C++ Dll in C# eingebunden.
In diesem Headerfile gibt es jetzt eine Struktur welche ich benötige welche ich aber nicht umgesetzt bekomme in C#.
Hier mal die C++ Struktur:

#define _NIComplexNumber

#pragma pack(push, 8)
typedef struct NIComplexNumber_struct {
   ViReal64 real;
   ViReal64 imaginary;
} NIComplexNumber;
#pragma pack(pop)

Diese Struktur habe ich folgendermasse nachegebildet:

[StructLayout(LayoutKind.Sequential)]
        public struct NIComplexNumber_struct
        {
           public double real; 
           public double imaginary;
        }

Das Problem welches hier auftritt ist folgendes: Diese Struktur ist teil einer Funktion und in ihrer Groesse veränderbar, d.h. es können mehrere Werte auftreten (z.B. 5 * real, 6*real, usw.)

ich habe nun diese Struktur instanziert als ein array welches sich dynamisch anpasst:
NIComplexNumber_struct[] _complex_struct = new NIComplexNumber_struct[x];

x ist heierbei die grösse des array und wird zur Laufzeit automatisch angepasst.

wenn ich nun diese Parameter abrufen will z.B. : _complex_struct[0].real ist der Wert immer 0.0 obwohl da eine Zahl drinne stehen müsste.

Zur Information: Ich lese IQ Daten eines Signals ein welche als real und imaginär teil in dieser Struktur gespeichert werden soll.

Könnt ihr mir vll helfen?? Seht ihr vll den Fehler oder braucht ihr noch mehr infos hierzu?

thanks

EDIT: Es gibt keine Fehlermeldung aus, lediglich die "Felder" für real und imaginär blieben leer.

27.06.2008 - 09:04 Uhr

vom Turnierverlauf kann es am Sonntag eigentlich nur einen Sieger geben: Spanien

Sie spielen einfach einen tollen und begeisternden Fusball...vor allem gestern wieder.

Aber wie sagte schon Lieneker: Das Spiel dauert 90 Minuten und am Ende gewinnt immer Deutschand.

Deswegen hoffe ich auf Deutschland

27.06.2008 - 08:17 Uhr

ich erhalte folgenden Fehler:

Additional information: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

Zu diesem Fehler ist zu sagen das die Speicherplatzstruktur in C# nach dem wrappen genauso aussehen muss wie in C++. Es wird ja durch die z.B durch die Datentypen Speicherplatz zur Verfügung gestellt bzw. reserviert in einer bestimmten Grösse (double = 8 Byte) und dieser muss dann in C# genauso aussehen wie in C++.

probier mal bei deinem Layoutkind.Sequential das durch Layoutkind.Explicit zu ersetzen und geb mit Fieldoffset die genaue grösse mit:

[StructLayout(LayoutKind.Explicit)]
        public struct _MapStruct
        {
            [Fieldoffset(0)]                         public string Key;
            [Fieldoffset(/*stringgroesse*/)] public float Value;
        }
25.06.2008 - 09:42 Uhr

Problem gelöst.

24.06.2008 - 19:31 Uhr

Ok dann mehr infos hierzu.

Folgendes:

Ich habe wie gesagt eine DLL mittels eines wrappers in C# eingebunden, genauer gesagt in mein Projekt. In dieser DLL sind verschiedene Funktionen definiert, d.h. mit diesen Funktionen kann man ein Messgerät ansteuern und sich gemessene Daten ausgebn lassen. so kann man z.B. eine FFT starten und mit mittels einer dieser Funktionen kann man die grösse der FFT ermitteln ( als Beispiel).

Warum ich diese DLL einbinde ist deshalb weil die firma des Messgerätes keine unterstützung für C# anbietet sondern nur für c++. So bezieht sich diese DLL also auf ein Headerfile. dort sind u.a. auch die verwendeten Datentypen definiert.

Hoffe soweit mitgekommen.
Das Problem ist jetzt folgendes: Wenn ich diese DLL wrappe kann er manche funktionen nicht "umsetzen" da er nicht weiss welchem Dateytyp das in C# entspricht, weil wie im vorigen post gesagt die Firma ihre eigenen Datentypen verwendet. So hab ich dir Firma angeschireben und gefragt welchem Datentyp das entspricht und sie meinten einem long.
(Warum sie das das nicht gleich in ihrem Wrapper umsetzen diesen Datentyp weiss ich auch nicht). Um eventuelle Fragen vorweg zu nehmen.

So versuche ich jetzt diesen Datentyp als einen long zu definieren was mir aber nicht so recht gelingt.

Hoffe das war verständlicher

EDIT:

es geht sich um diese variable :
ViInt64 actualSamples;
das ViInt64 entsprciht einem long wie man mir sagte.

der wrapper macht aber dieses draus:
int actualSamples;
und dazu diese Fehlermeldung:
"viint64" could not be resolved; Type will be treated as System.Int32.

Ich brauch diese Variable aber unbedingt als long da ansonsten der Speicherplatz flasch belegt wird und es zu Fehlern kommt

24.06.2008 - 17:15 Uhr

Hallo.

Mal ne Frage an euch:

Ich hab jetzt in mein C# Programm eine DLL eingebunden mittels eines wrappers. Das Problem der Wrapper hat einen Datentyp nicht erkannt und somit auch nicht gewandelt. Der Datentyp ist ein vom hersteller selbst definierter. Man sagte mir in c# sei es ein long. nur kann ich den nicht eher verwenden bevor ich definiert habe.

Ich habe versucht es ähnlich einer Struktur nachzubilden, weil der Wrapper das bei einer Struktur auch nicht schafft, aber bei dem Datentyp klappt es im Gegensatz zur Struktur nicht.

Kann mir da jemand weiterhelfen??

mfg Christian

19.06.2008 - 17:21 Uhr

jetzt läufts. hab die einlesung gestoppt als beide strings noch nicht vollständig verfügbar waren und diesmal kam keine fehlermessage. habs sicherheitshalber auch nochmal ohne die if(_serialport.isOpen) Prüfung gemacht und da war dann wieder ein fehler.

Problem erkannt und mit hilfe gebannt 🙂

danke

19.06.2008 - 16:58 Uhr

Hallo ich bins nochmal.

Das Problem ist nochmals aufgetreten pbwohl ich die eventbehandelnde methode vor dem close ausgetragen habe. Das komische ist manchmal funktioniert es und manchemal nicht, das die fehlermeldung auftaucht.

Ich hab mir das jetzt mal genauer angeschaut und gesehn das wenn ich den Port schliesse er trotzdem noch versucht daten durchzuschicken. Wenn man beim schliessen gerade den augenblick erwischt das alle 2 messages komplett da sind macht er alles ohne probleme, ist das aber nicht das fall komt die fehlermeldung weil der port dann eben schon zu ist.

Wie gesagt habe das versucht mit der methode die mir JAck30lena genannt hat aber da funktioniert es nicht wirklich aufgrund oben beschriebener sache.

Hat jemand noch eine Idee?? Ich stell mir das so vor das man ihm mitteilt lese string noch fertig aus und dann schliesse port. Frage nur wie man das realisiert. Habs versucht mit _serialport.dispose() aber hat auch nichts gebracht.

Wäre dankbar für nen denkanstoss.

19.06.2008 - 12:46 Uhr

Hallo zusammen.

1 Jahr C
1 Jahr C++

und seit 3 monaten C# und ASP.net

Edit: nebenbei ein wenig HTML

19.06.2008 - 12:24 Uhr

ich denke das Endpspiel ist Holland - Portugal......
Und dann möge der bessere gewinnen, wobei ich denke dann machen die Holländer das Rennen.

19.06.2008 - 10:46 Uhr

Sorry, hab dich falsch verstanden....jetzt funktionierts aber.

Dank dir

19.06.2008 - 10:34 Uhr

hab ich jetzt mal probiert aber dann schreibt er mir nur jeweils die Daten von einer GGA und einer RMC message in das file und nicht fortlaufend.

und da ich das system im auto einsetzen will benötige ich die sich forlaufend ändernden GPS daten.

19.06.2008 - 10:20 Uhr

Diese: string s = _serialport.ReadLine(); // read data from Port

19.06.2008 - 10:13 Uhr

Hallo miteindander.

Ich hab ein kleines Problem mit meinem Programm was ich geschrieben habe.
Und zwar. wird in meinem Programm GPS Daten eingelesen, genauer gesagt die RMC und die GGA message.

Dafür habe ich in der Windowsforms 2 buttons: Get und close.
Betätit man den Get button wird der Port COM1 geöffnet, Daten in einen string gelesen und dieser dann mittels binarywriter geschrieben.
Betätigt man den button close wird der Port und auch der Filestream geschlossen.

Soweit so gut. Das funktioniert auch ganz gut, nur das problem ist das es nur einmal funktioniert, d.h. 1 mal get und close get aber wenn man danach nochmals auf get und close drückt bekomm ich folgende fehlermeldeung(im anhang).

hier noch etwas code um das zu verdeutlichen:


public void serialport_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            string s = _serialport.ReadLine();  // read data from Port 
            BinaryWriter _new_binary_writer = new BinaryWriter(_new_filestream);

            if (s.StartsWith("$GPRMC"))  // RMC message 
            {
                string[] rmc = s.Split(new char[] { ',' });     // split string in fields devided by comma 
                longitude = Convert.ToDouble(rmc.GetValue(5));
                latitude = Convert.ToDouble(rmc.GetValue(3));
                speed = Convert.ToDouble(rmc.GetValue(7));
                timestring = Convert.ToInt64(rmc.GetValue(1));
            }
            else if (s.StartsWith("$GPGGA"))  // GGA message 
            {  
                string[] gga = s.Split(new char[] { ',' });   // split string in fields devided by comma 
                altitude_help = Convert.ToDouble(gga.GetValue(9));  
                altitude = Convert.ToUInt16(altitude_help);
            }

public void close_serialport()
        {
            _new_filestream.Close();
            _serialport.Close();         // close Port 
            _serialport.Dispose();       // gibt sämtliche Ressourcen frei
            //_WriteGpsStream.Close();   // close Write file  
            
        }

Kann mir da jemand weiter helfen???

EDIT: Ich weiss was die error message auf deutsch bedeutet aber weiss nicht wie ich das problem lösen kann

18.06.2008 - 12:29 Uhr

problem gelöst. merci

18.06.2008 - 11:17 Uhr

Jetzt tritt ein anderes Problem auf was ich versucht habe zu lösen, es mir aber nicht gelungen ist.

Ich lese die GGA und die RMC message ein und ziehe über den index die informationen heraus die ich benötige: dazu der code

if (s.StartsWith("$GPRMC"))
                {
                    //tw_gps.WriteLine(s);
                    string[] rmc = s.Split(new char[] { ',' });
                    longitude = Convert.ToDouble(rmc.GetValue(5));
                    latitude = Convert.ToDouble(rmc.GetValue(3));
                    speed = Convert.ToDouble(rmc.GetValue(7));
                    timestring = Convert.ToInt64(rmc.GetValue(1));
                    tw_gps.Write(status);
                    tw_gps.Write(timeStamp);
                    tw_gps.Write(timestring);
                    tw_gps.Write(longitude);
                    tw_gps.Write(latitude);
                    tw_gps.Write(speed);
                    tw_gps.Write(heading);
                }
                else if (s.StartsWith("$GPGGA"))
                {
                    //tw_gps.WriteLine(s);
                    string[] gga = s.Split(new char[] { ',' });
                    altitude_help = Convert.ToDouble(gga.GetValue(9));
                    altitude = Convert.ToUInt16(altitude_help);
                    tw_gps.Write(altitude);
                }

Nun zum problem: ich möchte die daten in einer bestimmten reihenfolge ablegen und das funktioniert mit dem code oben auch ganz gut , nur wenn die RMC message nicht die erste message ist die er gerade empfängt , sondern die GGA message, dann funktioniert es nicht.

Wie kann man das sicherstellen das er immer mit der RMC message anfängt???
Weiss da jemand einen rat/Stichwort??

mfg christian

18.06.2008 - 09:34 Uhr

hab das gerade mal probiert und klappt wunderbar.

vielen dank

18.06.2008 - 09:30 Uhr

kann ich ihm denn mit dem string.split auch sagen das man zwischen dem 3. und 4. kommadie daten haben möchste und noch die daten z.B. zwischen dem 5. und 6. komma??? fals ich mehrere daten benötige?

mfg christian

18.06.2008 - 09:06 Uhr

Hallo miteinander.

Ich hab folgendes Problem:
In meinem Programm lese ich über den seriellen Port GPS Daten ein, genauer gesagt die GGA und die RMC message. Ich benötige aber nur einzelne Daten aus diesen Strings wie z.B. longitude,latitude, ....

so eine message sieht folgendermassen aus :

$GPRMC,070146,A,4656.0363,N,00730.3820,E,000.0,151.7,180608,000.1,W*6E

Ich möchte jetzt die Daten aus für die longitude aus diesem string ziehen: 00730.3820

anfangs habe ich gedacht das dieser string immer gleich uassieht und deshalb ihn ab einer bestimmten stelle als substring heruasgezogen und zu double konvertiert.
Jetzt ist mir gesagt worden das dieser string jedoch nicht immer gleich aussieht, d.h. wenn z.b. der empfang nicht da ist bleibt eines der "Felder" leer.
Ich möchte nun den string jeweils absuchen und zwar so das ich genau die daten zwischen den einzelnen kommas erhalte, was mit substring nicht möglich ist.

Kann mir da jemand weiter helfen ??

Besten dank.

16.06.2008 - 15:39 Uhr

Danke für die Hilfe.

Habe es jetzt hinbekommen. Habe die struktur weggelassen und einfach nur variablen mit den Datentypen deklariert. Habe übersehen das char in C# nicht das gleiche ist wie in C++ und man den Datentyp Sbyte dafür braucht. Das konnte man dann problemlos konvertieren.
Danach mittels Binarywriter das ganze in ein binäres File geschrieben.
Die Bytelänge die geschrieben wird stimmt überein nur das Programm welches die Daten dann nutzt versteht die Datentypen nicht, da es sich um ein Visual C++ Programm handelt. Wie gesagt char und sbyte verstehen sich da nicht. Werde jetzt im C++ Programm versuchen die Daten in den richtigen Typ zu konvertieren.

16.06.2008 - 11:33 Uhr

weiss jemand wie man den Datentyp double in char konvertiert. hab zwar gelesen das funktioniert nicht, auch nicht explizit aber vll gibts da ja nen kleinen Trick

16.06.2008 - 10:01 Uhr

Hab dies gerade mal versucht aber da tritt auch wieder das Problem der Konvertierung auf 😦

16.06.2008 - 09:58 Uhr

Werte können sein alle vorzeichen und vorzeichenlosen Zahlen sein mit einer Kommastelle danach z.B. 30.2, -41.6, usw.

Hab mir gerade überlegt die Daten nicht erst versuchen zu wollen in ein Textfile zu schrieben sondern sie direkt beim schreiben binär zu serialisieren mittels der Klasse Filestream und und anschliessender erstellung eines binären Schreibobjektes:

binarywriter bw = new binarywriter(filedata)

Was hälst du/ihr davon?

16.06.2008 - 09:49 Uhr

Mit dem Resulatat-Bytes sit etwas unglücklich kommentiert.
Es handelt sich um ein 16 bit (2 Byte) char in C#....

Der empfangene wert ist vom typ double aber muss in char konvertiert werden weil das Programm das diese daten dann später verarbeitet nur diesen Datentyp verwenden und zuordnen kann bzw. versteht.

16.06.2008 - 09:38 Uhr

Hallo Khalid.

Danke für den Hinweis. Hab es jetzt mit dem Marshall.sizeOf probiert aber da hab ich das problem das ich nicht vom Typ double in char konvertieren kann.

Mein Code sieht jetzt folgendermassen dazu aus:

tw.WriteLine("{0}", Marshal.SizeOf(typeof(WriteDataToFile_rxd)));
            WriteDataToFile_rxd write = new WriteDataToFile_rxd();
            write.rxLevel = Convert.ToChar(greatestPeakPower);
            tw.WriteLine("{0}", Marshal.SizeOf(write));

greatestPeakPower ist hierbei der Wert der mir bei der Acquisition vom Messgerät zurück geliefert wird.

mfg
Christian

16.06.2008 - 08:59 Uhr

ja gut dass könnte ich auch machen aber die Aufgabenstellung verlangt es so. Das Format muss so aussehen weil ein anderes Programm auf diese Daten zugreift und genau diese Struktur benötigt um die Daten korrekt zu lesen. Das heisst ich brauche ein binäres file.

Habe es nach meinem ansatz jetzt einmal versucht aber das Problem ist, das ich der Klasse Streamwriter dann im Konstruktor kein möglichkeit angeben kann indem ich sage das es vom Typ der Struktur writeDataToFile_rxd ist.

Habe mir auch überlegt gleich binär zu serialisieren z.B. mit binary formatter, wie es markus geschrieben hatte , aber da hab ich auch wieder das problem das ich die Struktur des Files angeben muss.

mfg crueger

16.06.2008 - 08:31 Uhr

Hallo Leute.

Ich brauch mal eure hilfe.
Ich hab mir ein Messprogramm geschrieben und möchte diese eingelesenen Daten nun in einem bestimmten Format in ein Textfile schreiben und anschliessen Binär kodieren.

Ich hab mir überlegt das ich mir eine Struktur anlege wie das Textfile aussehen soll:

public struct WriteDataToFile_rxd
        {
            public ushort status;  // Status; 2 Byte
            public uint timestamp; // Zeitmarke; 4 Byte
            public char rxLevel;   // Resultat-Bytes wie vom Empfänger geliefert 
        }

aus der Klasse Textwriter wollte ich mir dann ein neues Objekt instanzieren damit die daten geschrieben werden. Nur weiss ich jetzt nicht richtig wie ich die Daten in dieser bestimmten Struktur ablegen kann.

zur binären Kodierung dachte ich mir das ich sie automatisch binär serialisier.

Kann mir da jemand weiter helfen????
Vielen Dank schonmal.