Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Versenden von Daten über einen virtuellen ComPort

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
13.03.2006, 16:33 Uhr
Isabelle



Hallo,
Meine C++-Applikation soll ein char-Array (buffer, s.u.) mit NMEA-Koordinaten über einen virtuellen ComPort an Fugawi (läuft auf dem gleichen PC und sollte dann die Position auf einer Karte darstellen) versenden. Das mache ich mit den folgenden Funktionen:

C++:
'hCom = CreateFile(pcCommPort, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);'
'
und

C++:
'WriteFile(hCom, buffer, sizeof(buffer), &dwBytesWritten, NULL);'
'
Leider kommen bei Fugawi keine richtigen Daten an. Über den Hyperterminal habe ich festgestellt, dass nur vier eckige Klammern übertragen werden.
Kann mir jemand sagen, woran das liegt? Gibt es andere Möglichkeiten Daten über einen ComPort zu verschicken? Oder hat vielleicht jemand schon mal was ähnliches versucht bzw. weiß, wo man nachsehen kann?
Danke für eure Hilfe,
Isabelle

Dieser Post wurde am 13.03.2006 um 16:36 Uhr von Isabelle editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
13.03.2006, 16:50 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Hast du mal die Rückgabewerte der Funktionen überprüft und was amEnde in dwBytesWritten drin stand?

wie ist buffer deklariert?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
13.03.2006, 16:51 Uhr
Isabelle



Habe noch etwas vergessen, der NMEA-String wird momentan so in den Buffer eingelesen:


C++:
String strGGA = "$GPGGA," + strHour + strMinute + strSec + "," + strLat + "," + strLatDirection + ","
        + strLon + "," + strLonDirection + ",1,"
        + strNoSat + ",," + strHei + "M,,,,\n";
    buffer = (char*)strGGA.c_str();


Ich nehme an, dass das auch das Problem ist. Ich habe das ganze mal mit einem ganz einfachen Buffer ausprobiert:

C++:
char buffer[] = {"Hello"};


und das kam richtig an.
Gibt es eine Möglichkeit, den String in ein richtiges char-Array einzulesen?

Danke schon mal für eure Hilfe,
Isabelle
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
13.03.2006, 16:58 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Ja das ist das Problem weil es ganz einfach falsch ist. Warum übergibst du nicht einfach deinen String?
Außerdem musst du die Länge des Strings mit strlen ermitteln wenn du buffer nicht so deklarierst
char buffer[] = "Hello";
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
13.03.2006, 16:58 Uhr
Isabelle



@Guybrush Threepwood:

dwBytesWritten hat den Wert 4. Der Buffer ist so deklariert, wie in meinem zweiten Posting und wird so initialisiert:

char *buffer;

Ich habe aber diese dunkle Vorahnung, dass ich jeden Buchstaben des Strings einzeln einlesen und in das char-Array stellen muss. Das wollte ich eigentlich vermeiden, da ich mir das sehr aufwändig vorstelle bzw. nicht genau weiß, wie es geht.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
13.03.2006, 17:02 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Nein. Erstens ist Buffer so ein Festes Array von 4 Zeichen + Binärer 0 und zweitens kannst du keine C-Strings mit dem gleich Operator kopieren.

Nochmal: Warum übergibst du nicht einfach strGGA?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
13.03.2006, 17:16 Uhr
Isabelle



Ich habe meinen Code wieder umgestellt, wie es am Anfang war:

der buffer wird in der Header-Datei jetzt so instanziiert:

char buffer[65536];

und dann hätte ich dem Buffer den String einfach so übergeben (in der cpp):

buffer = strGGA; (sämtliche Variationen mit Klammern und ähnlichem habe ich ausprobiert)

aber dann meckert der Compiler, dass er einen String nicht in einen char umwandeln kann.
Ich hab lang nicht mehr mit c++ programmiert, deswegen kenne ich nicht mehr alle Funktionen so genau. Oder ich stell mich grad ziemlich dämlich an.

Isabelle
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
13.03.2006, 17:17 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Dein einziges Problem ist eigentlich das "sizeof(buffer)" das liefert dir 4, weil bei dir sizeof(char*) 4 ist (int)


C++:
String strGGA = "$GPGGA," + strHour + strMinute + strSec + "," + strLat + "," + strLatDirection + ","
        + strLon + "," + strLonDirection + ",1,"
        + strNoSat + ",," + strHei + "M,,,,\n";
char *buffer = (char*)strGGA.c_str();

WriteFile(hCom, buffer, strGGA.length(), &dwBytesWritten, NULL);



sollte eigentlich gehen.

Wichtig ist jedoch: Wenn strGGA z.b eine lokale Variable irgendwo ist, und dein Writefile irgendwo anders ist, dann ist dein obiger "buffer" pointer nicht gültig!

Also z.b so:


C++:
const char *foo()
{
  String a = "muh";
  return strGGA.c_str();
}

void bar(const char *p)
{
  WriteFile(... p ...); // <-- p ist hier ungültig, da string in "a" auf das er zeigt schon nach verlassen von foo nicht mehr existiert
}

int main()
{
  const char *p = foo();
  bar(p);
}


--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
13.03.2006, 17:19 Uhr
Isabelle



Kann man dem ComPort einfach eine Zeichenkette übergeben? Die Funktion WriteFile hat doch bestimmte Parameter und der zu schreibende Wert ist ein char-Array. Aber ich probiere es gerne aus.

(Irgendwie schreiben wir immer aneinander vorbei)

grüße,
Isabelle
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
13.03.2006, 17:20 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Aber der Pointer ist doch total unnötig
Einfach (char*)strGGA.c_str() übergeben und fertig

EDIT das war auf Flos Post bezogen. Aber was verstehst du unter einer Zeichenkette und was unter einem Array?

Dieser Post wurde am 13.03.2006 um 17:21 Uhr von Guybrush Threepwood editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: