HalliHallo,
habe ein kleines Problemchen, nach Stundenlangen versuchen eine blöde
.ini Datei zu lesen (wer kommt denn schon drauf, dass man immer "\\"
statt "\" machen muss) is es mir letztenedes gelungen es DOCH zu
schaffen =))
hab dann den Inhalt in nem array gespeichert und per strcpy und strcat
mit weiteren strings verbunden.
1
strcpy(comport,"\x5C\x5C\x5C\x5C\x2E\x5C\x5C");//*Hexcode von \\\\.\\
2
strcat(comport,"COM");
3
strcat(comport,nummer);
da steht etz quasi: \\\\.\\COM32
so und nun will ich mit CreatFile den Port öffnen.
Normalerweise würde das ja so aussehen:
aber dann müsste ich ja den COMPort immer im Quellcode eingeben und neu
compilieren, was ja ein bisschen doof is...
dachte mir also ich speicher die COMport nummer in der .ini damit ich se
im nachhinein ändern kann, OHNE zu compilieren, ergo:
Chriss612 schrieb:> HalliHallo,>> habe ein kleines Problemchen, nach Stundenlangen versuchen eine blöde> .ini Datei zu lesen (wer kommt denn schon drauf, dass man immer "\\"> statt "\" machen muss)
Das ist eine C-Grundlage. Warum versuchst Du, C-Programme zu schreiben,
ohne Dich mit den Grundlagen zu beschäftigen?
> is es mir letztenedes gelungen es DOCH zu> schaffen =))>
1
strcpy(comport,"\x5C\x5C\x5C\x5C\x2E\x5C\x5C");//*Hexcode von
2
>\\\\.\\
3
>strcat(comport,"COM");
4
>strcat(comport,nummer);
Und warum schreibst Du nicht einfach
strcpy(comport, "\\\\.\\COM32");
oder
snprintf(comport, BUFSIZE, "\\.\\COM%d", portnummer);
> aber dann müsste ich ja den COMPort immer im Quellcode eingeben und neu> compilieren, was ja ein bisschen doof is...
Ja, das ist es.
> dachte mir also ich speicher die COMport nummer in der .ini damit ich se> im nachhinein ändern kann, OHNE zu compilieren, ergo:>>
Hallo,
Um die .ini Datei möglichst einfach und verständlich zu halten, soll in
dieser nur die Nummer des Ports eingetragen werden z.B. 32
Diese Zahl wird dann von
ausgelesen und in der Variablen nummer gespeichert.
Da ja COM32>>COM9 ist, benötigt man "\\\.\\" und sowieso das Wörtchen
COM. Mit:
1
strcpy(comport,"\x5C\x5C\x5C\x5C\x2E\x5C\x5C");//*Hexcode von \\\\.\\
2
strcat(comport,"COM");
3
strcat(comport,nummer);
ändert sich also jenachdem welche Zahl in die .ini Datei gesetzt wird,
auch der Inhalt der Variablen comport. comport ist als char* definiert,
damit ich diese dann anstatt "\\\\.\\COMxx" bei CreateFile einsetzten
kann
Wenn ich aber
1
strcpy(comport,"\\\\.\\COM32");
schreiben würde, wäre die COM-Nummer fix. Aber stimmt mit snprintf wäre
es etwas schönes aber meine Variante funktioniert auch.
Wenn ich mir nämlich mit printf(comport) anschaue, was gespeichert ist,
erscheint
1
\\\\.\\COM32
was ja eigtl genau das ist was brauche.
Ich müsste also nur noch die variable bei CreateFile einsetzten.
Wie gesagt Compilieren geht auch supertoll keine Fehler nichts nur der
Port öffnet sich nicht. Überwache ihn mit einem Monitor aber nichts
passiert.
Achja und in der .ini Datei soll nichts gespeichert werden, sondern nur
die Nummer des Ports ausgelesen werden. Würde zwar über die scanf
Fuinktin auch gehen aber dann müsste ich ja immer wieder die Nummer
eintippen. Dank der .ini muss ich dies nur einmal tun.
Vielen Dank schon mal und für die Idee mit snprintf machts gleich
übersichtlicher =)
Hallo,
du brauchst nicht "\\\\.\\COM32"
sondern "\\.\COM32" im String.
Da aber '\' das Escape-Zeichen ist, und die Esc-Sequens für '\' "\\"
ist, must du es im Quelltext halt jeweils mit doppelten Backslash
schreiben.
Ansonsten bau dir dein String mit sprintf/snprintf zusammen.
ciao Volker
So nachdem die Schnittstelle nun offen ist, habe ich das nächste
Problem...
ich versteh das nicht so ganz mit diesem Nokia FBus frames... was hat
das zubedeuten?
Chriss612 schrieb:> ändert sich also jenachdem welche Zahl in die .ini Datei gesetzt wird,> auch der Inhalt der Variablen comport. comport ist als char* definiert,
Und da haben wir schon den nächsten Fehler.
Tu dir selbst einen Gefallen und lerne erst einmal die
Programmiersprache und wie in C gewisse Dinge gehandhabt werden ehe du
dich in der Windows-Programmierung versuchst.
> Aber stimmt mit snprintf wäre> es etwas schönes aber meine Variante funktioniert auch.
Tut sie nicht.
Es mag so aussehen als ob.
Solange du
char* comport
hast, ist das ein kapitaler Fehler, den du da geschossen hast.
Chriss612 schrieb:> Hab mir mich schon gewundert wieso so viele Backslash da sind...
Du sollst dich nicht wundern, sondern ein C oder C++ Buch kaufen, lesen
und durcharbeiten.
Neben diesem Detail (das sich irgendwo auf den ersten 20 Seiten von
ungefähr 200 wiederfindet), findest du in deinem neu gekauften Buch auch
noch viele, viele, viele weitere Informationen und Details, die du
vorher noch nicht wusstest.
Chriss612 schrieb:> danke für die nett gemeinten tips aber gibt kein fehler mehr,> programm fehlererloscompiliert und funktioniert mit der ini datei
Wie schon gesagt:
solange du
char * comport;
im Programm hast und selbst keine Speicherallokierung machst, scheint es
nur so als ob es funktioniert. Tatsächlich hast du einen schweren
Fehler. Du kannst das ignorieren so lange du willst. Irgendwann wird es
dir auf den Kopf fallen. Und erfahrungsgemäss fällt es einem genau dann
auf den Kopf, wenn der Schaden am größten ist.
"Das Pferd betritt den Feldstecher."
ist ein gültiger deutscher Satz. Er verstößt gegen keine Duden-Regel.
Trotzdem ist er so falsch wie er nur sein kann.
Dein Compiler kümmert sich in diesem Sinne nur um die Duden-Regeln. Ob
deine Logik stimmt, ist dein Bier als Programmierer. Die Voraussetzung
"etwas compiliert fehlerfrei" ist zwar eine notwendige Voraussetzung für
ein fehlerfreies Programm, aber keine hinreichende.
notwendige Voraussetzung: A muss gegeben sein, damit B überhaupt je wahr
sein kann
hinreichende Voraussetzung: Wenn A wahr ist dann reicht das schon, dass
B auch wahr ist.