Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Schnittstelle ansprechen???

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
29.01.2004, 11:26 Uhr
~XXX
Gast


Hi!
Hier ist doch gewiss einer unter euch,der weiss wie ich eine Schnittstelle in C++ ansteuere. Möchte nur senden.
Mein Quelltext sieht bis jetzt so aus:


C++:
{
int data=2;         // Diese Zahl möchte ich senden weiss nur nicht ob ich dafür ein ASCII Zeichen senden soll

HANDLE h;

h = CreateFile("COM2",GENERIC_READ|GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);    // Möchte am COM2 senden

if(h == INVALID_HANDLE_VALUE)
     Memo1->Lines->Text="Null";   // Meine Abfrage ob die Schnittst. existiert
else
      Memo1->Lines->Text="True";

WriteFile(h,0,data,0,NULL);         //Stimmt das so wenn ich Daten senden will?

CloseHandle(h);                        // Schließen der Verbindung
}



Der Compiler zeigt so keine Fehler an. Möchte jetzt von euch noch wissen wie ich die serielle Schnittstelle initialisiere? Hab ein Beispiel gefunden, wenn ich dieses aber einbinde zeigt der Compiler den Fehler an das "dcb" nicht existiert.

Das Beispiel sieht so aus:

C++:
dcb.DCBlength = sizeof(DCB);
dcb.BaudRate = 38400;
dcb.ByteSize = 8;
dcb.Parity = 0;
dcb.StopBits = ONESTOPBIT;
dcb.fDtrControl = DTR_CONTROL_ENABLE;



Muss ich irgendeine Header einbinden? Welche?

Gruss Dennis

Dieser Post wurde am 29.01.2004 um 14:00 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
29.01.2004, 12:03 Uhr
ao

(Operator)


Hier gibts einen Beispielcode: www.fun-soft.de/showtopic.php?threadid=3242


Zitat:

int data=2; // Diese Zahl möchte ich senden weiss nur nicht ob ich dafür ein ASCII Zeichen senden soll


Kommt drauf an, was der Empfänger haben will bzw. verkraften kann. Technisch möglich ist beides.

Dein dcb-Fehler könnte daher kommen, dass du

C++:
DCB dcb;


vergessen hast. Für Baudrate und Parity gibt es ebenfalls vordefinierte symbolische Konstanten (z.B. CBR_38400 oder NOPARITY). Die solltest du verwenden anstatt selber Zahlen einzusetzen.

Alles erreichbar, wenn windows.h eingebunden ist.

Wenn du nur senden willst, brauchst du im Prinzip kein GENERIC_READ, schaden wirds aber nicht.

Dein Aufruf von WriteFile ist so ziemlich komplett falsch. Lies zuerst in der MSDN-Hilfe nach, wie es richtig geht. Wenn du danach noch Fragen hast, dann komm ruhig wieder.

WriteFile und CloseHandle dürfen natürlich nur aufgerufen werden, wenn CreateFile erfolgreich war.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
29.01.2004, 12:43 Uhr
~XXX
Gast


Erst schon mal vielen Dank.
Hätte aber noch fragen und zwar mit der Funktion "WrtiteFile" habe nichts gefunden kannst Du mir bitte sagen wie das richtig funktioniert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
29.01.2004, 12:52 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


na ist genau analog zu readfile


C++:
BOOL WriteFile(
  HANDLE hFile,                    // handle to file to write to
  LPCVOID lpBuffer,                // pointer to data to write to file
  DWORD nNumberOfBytesToWrite,     // number of bytes to write
  LPDWORD lpNumberOfBytesWritten,  // pointer to number of bytes written
  LPOVERLAPPED lpOverlapped        // pointer to structure for overlapped I/O
);




C++:
char inbuffer[100];//hier das zu übertragene in den buffer ballern
int bytes2write,nBytesWritten;
bytes2write=100; //oder wieviele auch immer...
WriteFile(h_com, &outbuffer, 100, &nBytesWritten, NULL);


--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 29.01.2004 um 12:52 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
29.01.2004, 12:59 Uhr
ao

(Operator)



Zitat:
~XXX postete
Erst schon mal vielen Dank.
Hätte aber noch fragen und zwar mit der Funktion "WrtiteFile" habe nichts gefunden kannst Du mir bitte sagen wie das richtig funktioniert.


Hast du die MSDN-Library installiert?

Wenn du da im Index anfängst, das Wort "WriteFile" zu tippen, erscheint sofort eine Liste Stichwörter im Fenster darunter, auf die du klicken kannst, und dann erhältst du ausführliche Hilfe im rechten Fenster.

Wenn das nicht funktioniert, solltest du die MSDN-Library schnellstens nachinstallieren, denn das ist *die* Referenz und Hilfe für alle Windows-API-Programmierer.

Du findest sie auch online unter msdn.microsoft.com

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
29.01.2004, 14:07 Uhr
~xxx
Gast


ich habe mir die MSDN Libary mal angeschaut. Sieht richtig übel aus.

Trotzdem hät ich mal eine Bitte an euch. Habe mal versucht ne WriteFile Funktion zu schreiben so wie Windalf beschrieben hat. Könntet ihr mir nicht bitte mal so eine komplett funktionierende Funktion liefern??? Bräuchte sie dringend für ein Schulprojekt.

Ich wäre Euch sehr dankbar. Den ich habe nicht mehr viel Zeit, bis zum Projektende.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
29.01.2004, 14:46 Uhr
ao

(Operator)



Zitat:
~xxx postete
ich habe mir die MSDN Libary mal angeschaut. Sieht richtig übel aus.


Nur auf den ersten Blick. Lass dich nicht einschüchtern.


Zitat:
Könntet ihr mir nicht bitte mal so eine komplett funktionierende Funktion liefern???

Mit deinem eigenen Ansatz von ganz oben und Windalfs Hilfe müsstest du eigentlich schon recht weit kommen. Wo hakts denn noch?

In das, was Windalf outbuffer genannt hat, kopierst du zuerst die Daten rein, die du senden willst.

In den Aufruf von WriteFile gibst du den outbuffer, die Anzahl der Bytes, die gesendet werden sollen (nicht die physikalische Puffergröße, das kann mehr sein) und einen Zeiger auf eine DWORD-Variable (NbrOfBytesWritten). Den letzten Parameter (Overlapped) kannst du auf NULL setzen.

Der Rückgabewert von WriteFile ist TRUE (wenns geklappt hat) oder FALSE (wenn nicht).

Im Fall von FALSE verrät dir die Funktion GetLastError (), was schiefgegangen ist. Im Fall von TRUE steht in der NbrOfBytesWritten-Variablen drin, wie viele Bytes tatsächlich übertragen wurden.

ao

Dieser Post wurde am 29.01.2004 um 14:47 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
29.01.2004, 18:25 Uhr
~global
Gast


hi, der wind-alf hat leider wieder ein paar kleine flüchtigkeits fehlerchen mit reingeschummelt ! *g*

so sollte es gehen:

C++:
char buffer[256];
int Bytes=256;
...
if (!WriteFile(m_hComPort, &buffer, Bytes, &Bytes, NULL))
{ /* Schreiben ist fehlgeschlagen */ }
else
{ /* es wurden "Bytes" bytes gesendet }

--
schönen tach noch
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
02.02.2004, 11:01 Uhr
~xxx
Gast




Ihr habt mir sehr geholfen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
03.02.2004, 10:38 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


@global
hmm habe gerade mal Windalf spassenshalber bei google eingeben...Ich hatte eigentlich gedacht das ich mir mit mike zusammen mal einene neuen Namen ausgedacht habe... Leider nicht gibts schon ewig...

Mit Wind-Alf liegst du ziemlich richtig...


Zitat:

Windalf, der Beherrscher der Zwerge, welcher die vier starken Zwerge, die das Himmelsgewölbe tragen, beaufsichtigt, und auf dessen Befehl sie blasen, d.h. Wind machen müssen, daher sein Name Windalf.



Man müssen die Leute früher bekloppt gewesen sein auf die Idee zu kommen das der Himmel von vier Zwergen gehalten wird die den ganzen Tag am keuchen sind... Und falls sie mal keine Lust dazu haben kommt der Kerkermeister Windalf und peitscht sie ein bisschen aus...
Naja wenigstens hab ich den Eierschaukeljob abbekommen...
--
...fleißig wie zwei Weißbrote
 
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: