Forum: PC-Programmierung Extension PHP RS232 Return_String


von Sebastian S. (bachelor)


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

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Sebastian S. schrieb:
> funktioniert bei mir leider nicht
Wenn was nicht funktioniert, ist das ein untrügerisches Zeichen dafür 
das 'was falsch ist.
Was geht den nicht?

von Sebastian S. (bachelor)


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);

von Sebastian S. (bachelor)


Lesenswert?

Für alle die hier mal durchkommen auf der Suche nach einer Lösung siehe
Beitrag "Re: RS232 mit PHP"

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.