Com port - Fehler bei WriteFile/FeadFile

TimN

Erfahrenes Mitglied
Hi,

ich bin gerade demit beschäftigt, ein Programm zu schreiben, mit dem ich Werte, die ich von einem AD-Wandler über den com Port bekomme, auswerten kann.

Das Problem ist, dass ich immer "FEHLER #06" bekomme ( => WriteFile gibt FALSE zurück )
Kann das daran liegen, dass kein Gerät am com port angeschlossen ist, oder wie oder was?

hier mal mein quelltext:
Code:
#include <windows.h> 
#include <iostream.h> 

WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) 
{ 
  HANDLE hCom = CreateFile("COM1", GENERIC_WRITE|GENERIC_READ, 0, NULL, 
			  OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL); 
  if(!SetupComm(hCom, 512, 512)) 
  { 
	MessageBoxA(NULL, "FEHLER #01", "comPort", NULL); 
	return 0; 
  } 

  DCB dcb; 
  ZeroMemory(&dcb, sizeof(DCB)); 

  char buffer[100]; 
  strcpy(buffer,"baud=1200 parity=N data=8 stop=1"); 
  if (BuildCommDCB((char*)&buffer, &dcb)) 
  { 
	if (dcb.BaudRate != CBR_1200) 
	{ 
	  MessageBoxA(NULL, "FEHLER #02", "comPort", NULL); 
	  return 0; 
	} 
  } 
  else 
  { 
	MessageBoxA(NULL, "FEHLER #03", "comPort", NULL);   
	return 0; 
  } 

  if(GetCommState(hCom, &dcb)) 
  { 
   dcb.BaudRate = CBR_19200; 
   dcb.ByteSize = 8; 
   dcb.Parity = 0; 
   dcb.StopBits = 0; 
   SetCommState(hCom, &dcb); 
  } 
  else 
  { 
	MessageBoxA(NULL, "FEHLER #04", "comPort", NULL); 
	return 0; 
  } 

  if (hCom == INVALID_HANDLE_VALUE) 
  { 
	MessageBoxA(NULL, "FEHLER #05", "comPort", NULL); 
	return 0; 
  } 

  DWORD temp, numbytes_ok; 
  COMSTAT ComState; 
  OVERLAPPED Overlap; 
  char buf_out[1] = "a"; 

  ClearCommError(hCom, &temp, &ComState); 
  ZeroMemory(&Overlap, sizeof(OVERLAPPED)); 
  if(!temp) 
  { 
   if(!WriteFile(hCom, &buf_out, 1, &numbytes_ok, &Overlap)) 
   { 
	MessageBoxA(NULL, "FEHLER #06", "comPort", NULL); 
	return 0; 
   } 
  } 

  DWORD error; 
  error = GetLastError(); 
  if(error) 
   MessageBoxA(NULL, (char *)error, "comPort", NULL); 


  CloseHandle(hCom); 

  MessageBoxA(NULL, "Alles im grünen Bereich!", "comPort", NULL); 

  return 0;
 
moin


Also wenn kein Gerät angeschlossen ist, sollte schon CreateFile nen Fehler zurückgeben.

Edit:
Außerdem soltlest du buf_out so erstellen:
Code:
char buf_out[2] = "a";
Und dann musst du buf_out bei WriteFile ohne & übergeben.


mfg
umbrasaxum
 
Noch'n kleiner Tip:
Wenn Du nach dem fehlgeschlagenen WriteFile ein
Code:
DWORD dwError = GetLastError();
einfügst, dann erfährst Du auch, was nicht geklappt hat. Die Bedeutung der Fehlercodes steht im MSDN.
 
Zurück