Extension PHP RS232 Return_String

#1992986
Lesenswert?

Hi Leute,

ich bin gerade dabei eine Extension für PHP zu schreiben, mit der ich 
die Serielle Schnittstelle auslesen kann.

Leider sind jedoch mein C++ nicht ausreichend. Was muss ich der Funktion 
RETURN_STRING übergeben das immer nur das eine Zeichen geschickt wird?
Die Funktion erwartet einen String.
1
ZEND_FUNCTION(readRS232){
2
  char InChar[1];
3
  InChar[0] = '\0';
4
  ReadFile( hCom, &InChar[0], 1, &BytesRead, NULL);
5
  RETURN_STRING(&InChar[0], 1);
6
}

Auch die in der Doku beschriebene Art Return_String aufzurufen 
funktioniert bei mir leider nicht.
http://devzone.zend.com/article/1021
1
ZEND_FUNCTION(readRS232){
2
  char *InChar;
3
  InChar = estrdup("");
4
  ReadFile( hCom, InChar, 1, &BytesRead, NULL);
5
  RETURN_STRING(InChar, 0);
6
}

Danke für eure Hilfe

Gruß S
#1993546
Lesenswert?

Läubi schrieb:
> Wenn was nicht funktioniert, ist das ein untrügerisches Zeichen dafür
> das 'was falsch ist.
> Was geht den nicht?

Was nicht funktioniert war mir bis heute morgen selber nicht klar!
Aber manchmal hilft es wenn man ein Nacht darüber schläft.

Ich möchte immer ein Zeichen von der Seriellen Schnittstelle lesen.
1
ReadFile( hCom, &InChar[0], 1, &BytesRead, NULL);
und dann an die RETURN_STRING übergeben
1
RETURN_STRING(&InChar[0], 1);
diese erwartet jedoch ein String, somit sucht die Funktion vom Pointer 
ab bis zum String Ende, welches jedoch nicht vorhanden ist und nur 
zufällig im Speicher hängt.
Lösung ist einfach ein String Ende selber hinzuzufügen.
1
  char InChar[2];
2
  InChar[0] = 3;
3
  InChar[1] = '\0';
4
  ReadFile( hCom, &InChar[0], 1, &BytesRead, NULL);
5
  RETURN_STRING(&InChar[0], 1);

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren