Seite 1 von 2

Erledigt: Erweiterte Information des laufenden Events ermitteln

Verfasst: So 9. Jul 2006, 17:24
von Elle4u
Hallo zusammen,

ich verzweifel gerade mal wieder mit diesen Zeigern und so weiter :u:

Code: Alles auswählen

TYPE_TapEvent *Event = NULL;

Event = TAP_GetCurrentEvent(RecInfo.svcType, RecInfo.svcNum);
//TAP_Print( "%s\n", TAP_EPG_GetExtInfo(Event) );
&InfoBuffer[1] = TAP_EPG_GetExtInfo(Event);
Das TAP_Print gibt mit den Text aus aber die Zuweisung in InfoBuffer (da speicher ich die erweiterten Infos) funktioniert einfach nicht. Egal wie und wo ich die (& oder *) setzte...

Code: Alles auswählen

invalid lvalue in assignment
Kann mir BITTE jemand helfen :oa: .

Verfasst: So 9. Jul 2006, 17:44
von t3xi
Hi Elle4u,

man sieht leider nicht was dieser InfoBuffer[1] ist, aber probier mal folgendes:

byte *extInfo;
extInfo = TAP_EPG_GetExtInfo(Event);

... usw ...

TAP_MemFree(extInfo);

Verfasst: So 9. Jul 2006, 17:52
von FireBird
Ich nehme an, dass Du die Extended Info wegkopieren möchtest. Deshalb ist auch strcpy zu verwenden:

Code: Alles auswählen

  char                  InfoBuffer [4096];
  byte                  *pExtInfo;

  Event = TAP_GetCurrentEvent(RecInfo.svcType, RecInfo.svcNum);
  pExtInfo = TAP_EPG_GetExtInfo(Event);
  strcpy (InfoBuffer, pExtInfo);
  TAP_MemFree (pExtInfo);
  TAP_Print ("%s\n", InfoBuffer);

Nicht auf das TAP_MemFree vergessen, sonst gibt es Memory-Leak.

Verfasst: So 9. Jul 2006, 17:54
von Elle4u
t3xi hat geschrieben:Hi Elle4u,

man sieht leider nicht was dieser InfoBuffer[1] ist
Oh. Sorry.

InfoBuffer ist ein Char:

Code: Alles auswählen

unsigned char InfoBuffer[10000];
Und das muß auch so bleiben, da die anderen Dinge bereits darauf aufbauen...
Ansonsten lese ich es aus dem Header mit:

Code: Alles auswählen

TAP_Hdd_Fseek(openedFile, 368 + TempHeaderOffset, SEEK_SET);
TAP_Hdd_Fread(&InfoBuffer[1], extdescLength, 1, openedFile);
Aber bei einer laufenden Aufnahme möchte ich es aus dem akt. Event holen...

Aber das geht auch nicht?

Code: Alles auswählen

&InfoBuffer = "Test";
Fehlermeldung:

Code: Alles auswählen

incompatible types in assignment

Verfasst: So 9. Jul 2006, 17:56
von Elle4u
FireBird hat geschrieben:Ich nehme an, dass Du die Extended Info wegkopieren möchtest. Deshalb ist auch strcpy zu verwenden:
Danke.

Ich werde das mal versuchen...

Verfasst: So 9. Jul 2006, 18:01
von Elle4u
Elle4u hat geschrieben:Danke.

Ich werde das mal versuchen...
Cool.

Das geht. :hello: :hello: :hello:

Mann das hat mich jetzt Stunden gekostet :oops:

Verfasst: So 9. Jul 2006, 18:31
von Elle4u
So funzt es nun:

Code: Alles auswählen

TYPE_TapEvent *Event = NULL;
byte *pExtInfo;

Event = TAP_GetCurrentEvent(RecInfo.svcType, RecInfo.svcNum);
pExtInfo = TAP_EPG_GetExtInfo(Event);
strcpy (&InfoBuffer[1], pExtInfo);
TAP_MemFree (pExtInfo);

Verfasst: So 9. Jul 2006, 18:37
von t3xi
Und wieso bleibt das erste Byte im InfoBuffer ungenutzt? :?

Verfasst: So 9. Jul 2006, 18:39
von FireBird
Elle4u hat geschrieben:

Code: Alles auswählen

strcpy (&InfoBuffer[[b][color=Red]1[/color][/b]], pExtInfo);
Warum beginnst Du beim 2. Element?

Verfasst: So 9. Jul 2006, 18:39
von Happy
Elle4u hat geschrieben:So funzt es nun:

Code: Alles auswählen


strcpy (&InfoBuffer[1], pExtInfo);

Hi,

hier wird die erw. Info aber ab dem 2. Byte von Infobuffer eingefügt, nicht an den Anfang. Ist das so gewollt ?
Normalerweise würde man das Kopieren so machen:

Code: Alles auswählen

strcpy (InfoBuffer, pExtInfo);

Verfasst: So 9. Jul 2006, 18:41
von FireBird
Happy hat geschrieben:hier wird die erw. Info aber ab dem 2. Byte von Infobuffer eingefügt, nicht an den Anfang.
Dritter :p

Verfasst: So 9. Jul 2006, 18:42
von t3xi
Erster :p

Verfasst: So 9. Jul 2006, 18:45
von Happy
:cry: :cry: :cry:
Hab aber mehr geschrieben plus Verbesserungsvorschlag :altermotzsack: :wink:

Gruß,
Happy

Verfasst: So 9. Jul 2006, 18:46
von Elle4u
Das hat DeJe damals so gemacht.
Warum auch immer... :thinker:
Wenn ich aber nur kopiere, dann fehlt nachher das 1. Zeichen in der Ausgabe.

Habe jetzt noch ein Problem.

Wenn eine Info leer ist, dann friert der Topf hier ein:

Code: Alles auswählen

strcpy (&InfoBuffer[1], pExtInfo);
Kann ich das noch irgendwie abfangen?

Verfasst: So 9. Jul 2006, 18:49
von FireBird
if (pExtInfo != NULL)

Das zum Thema: die Entwickler reden nicht miteinander.

Verfasst: So 9. Jul 2006, 18:54
von Elle4u
FireBird hat geschrieben:Das zum Thema: die Entwickler reden nicht miteinander.
OK. Danke. :up:

Und entschuldigt meine für Euch sicherlich manchmal doof erscheinenden Nachfragen :oops:
Kann mir vorstellen, daß Euch da manchmal die Haare zu Berge stehen. :X

So wie mir, wenn ein Laie vom PC spricht :D

Verfasst: So 9. Jul 2006, 19:00
von Homer
Man darf natürlich nur so viele Bytes von pExtInfo kopieren, wie man bei "TAP_EPG_GetExtInfo(Event)" erhalten hat.

Viele Grüße
Homer

Verfasst: So 9. Jul 2006, 19:09
von Elle4u
Homer hat geschrieben:Man darf natürlich nur so viele Bytes von pExtInfo kopieren, wie man bei "TAP_EPG_GetExtInfo(Event)" erhalten hat.
Aber da erhält man ja nur einen Pointer...

Klappt aber ja jetzt wunderbar :hello:

Verfasst: Mo 10. Jul 2006, 11:51
von Harvey

Code: Alles auswählen

strcpyn (&InfoBuffer[1], pExtInfo, 9999);
InfoBuffer[9999]=0;
Das verhindert einen Überlauf, falls die erweiterte Info mehr als 10000 Zeichen hat.

Verfasst: Mo 10. Jul 2006, 15:49
von Gerti
Hi!

Ich muß gestehen, alles verstanden zu haben, was hier geschrieben wurde...ich bin platt :-)

Gruß,
Gerti