.| Autor | Beitrag |
|---|---|
|
000 20.11.2001, 17:05 feigling |
Da ich mit diesem Problem schon dp, Prefect und Retro auf die Nerven gehe, sollen die anderen im Forum auch nicht verschont bleiben :D Hier erstmal der Code, der mir Probleme bereitet
Und das verstehe ich nicht. Ich weiß nicht, was der mit dem String macht. Prefect sagte mir, dass der Text, der empfangen wird dann in einzelne Wörter geteilt wird, aber trotzdem verstehe ich nicht, wie das ganze geht. Es fängt schon mit der Zeile argv[0] = buffer; an. Warum kann man dort einer Char-Variable mit nem Array dort an [0] einen ganzen String reinschreiben ? Einen ganzen String, wo eigentlich nur ein Buchstabe reinpasst :? . Der Buffer wird ja gesamt in [0] von argv gelegt oder verstehe ich das falsch, so dass der Buffer von [0] an reingeschrieben wird, also das nicht der buffer in [0] ist sondern je nach der Länge der Message auch in [1] .. [10] gelegt wird ? Und wenn da argv[1] = buffer; stehen würde, dass dann der Buffer ab [1] geschrieben wird.
Hmm habe ich noch was vergessen, was ich noch erwähnen müsste *kurz nachdenken*, naja, ich denke mal, ich könnte mir das alles mit der dll ersparen, wenn ich wüsste, wie der string nachher aussieht, wenn der bearbeitet worden ist. Dann könnte ich das alle mit Delphi und copy,concat machen, aber da ich keinen blassen Schimmer habe, was am Ende für ein String rauskommt, kann ich es nicht machen. |
|
Profil || Suche |
|
001 20.11.2001, 18:32 Tron |
ich hab jetzt nicht alles gelesen, aber zu deinem ersten problem: argv ist so definiert: es ist also kein array aus chars (das waere char argv[MAX_IRC_LINES], OHNE *) daher wird in der zeile kein string kopiert, sondern nur ein zeiger ps: daher bin ich immer noch fuer die schreibweise char* bla und nicht char *bla --'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams 'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett |
|
Profil || Suche |
|
002 20.11.2001, 21:32 feigling |
hmm, jo, stimmt :) |
|
Profil || Suche |
|
003 20.11.2001, 22:11 Tron |
soo... hab's mir mal angeschaut und versuch das mal ein bissl zu erklaeren bsp: angenommen das erste zeichen befindet sich an andresse 100, dann werden in argv folgende adressen gespeichert: das so direkt in pascal umzusetzen duerfte nicht gehen, da pascal strings nicht im ASCIIZ format (also \0 terminiert) sondern mit fuehrender laengenangabe speichert (und kein terminator) /* erste zeile kann sofort vermerkt werden */ /* solange bufptr auf ein zeichen ungleich \0 zeigt, also der string noch nicht zu ende ist (elegante version von while(*bufptr != '\0') */ /* wenn bufptr auf ein linefeed zeigt... */ 'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams 'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett Dieser Beitrag wurde am 20.11.2001 um 22:14 von Tron bearbeitet. |
|
Profil || Suche |
|
004 20.11.2001, 23:00 feigling |
wow, cool, vielen Dank dafür. Ich werde mir das morgen mal genau angucken und versuchen, es mit Delphi nachzumachen. Genau sowas brauchte ich, damit ich weiß, wie der string dann aussieht. Vielleicht kriege ich das Programm ja dann so hin, ohne das in ne dll auszulagern. |
|
Profil || Suche |
|
005 22.11.2001, 16:57 feigling |
Ich habe mir das jetzt mal ganz genau angeguckt und ich denke, dass ich das mit einigen Kniffen hinbekommen werde. Ich hoffe nicht, dass ich mit \n und \r Probleme bekomme, denn die Message kommt ja vom Server, also sind dort noch \r\n drin und dann muss ich sehen, wie ich das dann umwandele, ohne das Delphi das verändert. Ich bin mir nicht sicher, ob Delphi es gleich verändert, wenn ich die Nachricht in einen String kopiere, also
Eigentlich dürfte er den text vom Server noch nicht verarbeiten, also automatisch die \r\n verarbeiten. Das müsste alles dann noch richtig im String stehen und durch ein paar Stringbearbeitung müsste :? ich das gleiche Ergebnis bekommen, wie in C++. Edit: Ja es geht mit \n und \r. Delphi bearbeitet die nicht weiter, also ändert nix daran. Ich hab ja auch die Commands \n und \r als Befehle für mein selbstgeschriebenes Chatprogramm genommen und da werden die Befehle vom Server zum Client auch richtig weitergeleitet, also die \n und \r bleiben stehen. Also hätte ich mir eigentlich garkeine Gedanken machen müssen :) -- |
|
Profil || Suche |
|
006 22.11.2001, 18:03 feigling |
Ich hab das mal versucht, mit Delphi nachzucoden und ich hoffe, dass es geklappt hat. Du kannst es ja mal ausprobieren, ob es das so richtig macht. Das mit dem Pointer und wann ein String wieder anfängt, habe ich so gemacht, dass der einfach angibt, an welcher Stelle ein String anfängt, also z.B. fängt bei Hallo\r\ndu\r\nda\n\0 ein String an der Stelle 0 an, nämlich Hallo, dann fängt einer bei 9 an (du) und einer bei 15 (da) an. So weiß ich schonmal, wann ein String an und aufhört. Das andere muss ich noch machen, aber ich hoffe, dass der erste Teil hier schonmal so in etwas stimmt. Hier der Download-Link für das Programm => http://people.freenet.de/feigling4u und dann einfach test.zip Ich hoffe, dass man es downloaden kann, weil ich mir bei Freenet nicht so sicher bin, weil es schon öfters nicht geklappt hat :\ Kann etwas dauern, bis es geht. [EDIT] Ich hab das mal ausprobiert, aber es scheint nicht zu klappen. Edit 1 ist für die Ip, heißt also edit1.text := '208.29.195.67'; Das ist eigentlich alles, was man wissen müsste.
Mag sein, dass der Code umständlich geschrieben ist. z.B. das man durch Drücken des Button1 nur eine Prozedur aufgerufen habe, also dass ich mir die Prozedur hätte sparen können, wenn ich den Code der Prozedur gleich bei Button1 hingeschrieben hätte. Naja, vielleicht gibt es ja jemanden, der ne Antwort darauf weiß, warum das nicht funktioniert, nur ich kriege es nicht hin, da ich nicht weiß, was da falsch ist. --Dieser Beitrag wurde am 22.11.2001 um 21:00 von feigling bearbeitet. |
|
Profil || Suche |
|
007 22.11.2001, 22:37 Another1 |
*arufreg* schrecklich! ... gebt euren Buttons/Edits/Forms/Etcs doch mal ordentliche namen =P --Another1 ...relaxing..atm =) |
|
Profil || Suche |
|
008 23.11.2001, 14:28 feigling |
Warum das :) |
|
Profil || Suche |

