Autor Beitrag
kuba67
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Do 11.02.10 20:44 
Hallo,

ich möchte das Binär-Protokoll - Für Fortgeschrittene auf Delphi 2009/2010 umstellen und komme nicht weiter.

Im Anhang sende ich meine verwendete Version NarsesBFPA.pas, vielleicht kann sich das mal jemand ansehen ? Beim Compilieren erscheint keine Fehlermeldung, trotzdem muss ich irgend etwas grundsätzliches falsch gemacht haben.

kuba


Moderiert von user profile iconChristian S.: Topic aus Neue Einträge / Hinweise / etc. verschoben am Fr 12.02.2010 um 11:57
Moderiert von user profile iconNarses: Original-Code aus dem Tut aus dem Anhang entfernt.
Einloggen, um Attachments anzusehen!
Astat
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 75
Erhaltene Danke: 1

Windows 2000
D6, D7, D2007, Lazarus
BeitragVerfasst: Fr 12.02.10 16:55 
Hallo kuba67, die Ursache ist Unicode ab D2009!

String mit AnsiString; Char mit AnsiChar PChar mit PAnsiChar ersetzen.
Keine Stringroutienen verwenden die Unicode verwenden, problematisch könnten TStrings ab D2009 sein???

Das Protokoll auf Unicode umstellen, würde ich sowieso nicht machen, warum auch?!

lg. Astat


Zuletzt bearbeitet von Astat am Sa 13.02.10 05:54, insgesamt 1-mal bearbeitet
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 12.02.10 18:00 
Moin!

user profile iconkuba67 hat folgendes geschrieben Zum zitierten Posting springen:
ich möchte das Binär-Protokoll - Für Fortgeschrittene auf Delphi 2009/2010 umstellen und komme nicht weiter.
[...]
Beim Compilieren erscheint keine Fehlermeldung, trotzdem muss ich irgend etwas grundsätzliches falsch gemacht haben.
user profile iconAstat hat folgendes geschrieben Zum zitierten Posting springen:
die Ursache ist Unicode ab D2009!
So ist es.

user profile iconAstat hat folgendes geschrieben Zum zitierten Posting springen:
String mit AnsiString; Char mit AnsiChar PChar mit PAnsiChar ersetzen.
Das wäre der erste Teil.

user profile iconAstat hat folgendes geschrieben Zum zitierten Posting springen:
Keine Stringroutienen verwenden die Unicode verwenden, problematisch könnten TStrings ab D2009 sein?
Das ist der zweite Teil, im Besonderen scheint mir TStringList ab D2k9 auch auf Unicode-Strings zu basieren, was für die Framelisten tödlich ist.

Um es kurz zu machen:
Hiermit rate ich davon ab, diesen Ansatz für Delphi-Versionen >= D2k9 zu verwenden.
Ich habe die Tutorials hauptsächlich zu diaktischen Zwecken entwickelt, der Ansatz ist nicht wirklich für den Produktiv-Einsatz geeignet (aus diversen Gründen, die ich hier mal nicht einzeln auswalzen will, soll ja den Beitrag nicht sprengen). Es ging mir in erster Linie darum, die Technik und das Konzept eines Protokolls zu verdeutlichen. Optimal dafür ist Delphi 7 geeignet. :zustimm:

Für einen Produktiv-Einsatz sollte man sicher besser auf blocking-socket-calls und Threads aufsetzen (wobei ich auch ausdrücklich nicht die Indy-Komponenten empfehle; wer wissen will warum, sollte sich mal ausführlich mit den Kommentaren im QT auseinandersetzen; auch die völlige Inkompatibilität bei einem Versionssprung ist nicht gerade "professionell" zu nennen). :idea:

Da ich keine Delphi-Version >=2k9 besitze und die Wahrscheinlichkeit, dass sich das jemals ändert, eher gering ist (Spenden sind herzlich willkommen :lol:), werde ich den Code aller Voraussicht nach auch nicht mehr anpassen.

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
kuba67 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Fr 12.02.10 23:11 
Hy,

ich hatte mir schon sowas gedacht, schade eigentlich ... :lol:

kuba
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Sa 13.02.10 02:33 
Der richtige Ansatz wäre, Array of Byte statt Strings zu nutzen. Man müsste sich dann aber zwei bis drei Hilfsroutinen als Ersatz für die String-Operationen bauen.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Sa 13.02.10 03:06 
Richtig wäre, dass Embadingsda die Leute wieder einstellt, die bei Borland die Umstellung von ShortString auf AnsiString gemacht haben.
Da gings doch auch, ohne dass die VCL inkompatibel zu sich selbst wird. Dass die Funktion AnsiUpperCase Unicode zurückgibt, kann ja wohl nicht sein?

Übrigens müsste man mit array of char weniger neu schreiben als viele denken. Sämtliche String-Helper-Funktionen funktionieren auch auf dynamischen arrays (Length, Copy, Insert, Delete, Concat...)

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Sa 13.02.10 03:09 
Ich weiß, aber in einem Tutorial sollte man nicht grad die Bad Practices zeigen, weil jemand mal damit angefangen hat ;-)

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
kuba67 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Sa 13.02.10 18:05 
Die Leute einfach zu entlassen finde ich auch nicht richtig, auch wenns inkompatibel geworden ist, ist ja wohl kein Grund. Jedenfalls hab ich mir überlegt auf die Indy TidTCPClient/TidTCPServer Komponenten zu wechseln. Dort scheint die Komponente noch kompatibel zu sein.

Kann mir vielleicht jemand einen Tip geben wo ich ein gutes Beispiel finde ? Möglichst mit Filetransfer ...

kuba

PS: macht es Sinn den Code aus dem Tutorial auf Indy umzustellen ?
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: So 14.02.10 23:44 
Moin!

user profile iconkuba67 hat folgendes geschrieben Zum zitierten Posting springen:
Jedenfalls hab ich mir überlegt auf die Indy TidTCPClient/TidTCPServer Komponenten zu wechseln.
Das kann man machen, ist aber auch nicht ganz ohne Fallstricke.

Wenn ich´s neu machen müsste, würde ich direkt in Threads auf die WSA gehen. Das ist weniger abschreckend, als es auf den ersten Blick aussieht und (die Basisfunktionen) bestimmt auch nicht schlechter, als die Jungs der Indy-Crew das umgesetzt haben. :nixweiss:

user profile iconkuba67 hat folgendes geschrieben Zum zitierten Posting springen:
Dort scheint die Komponente noch kompatibel zu sein.
Hä? :gruebel:

user profile iconkuba67 hat folgendes geschrieben Zum zitierten Posting springen:
macht es Sinn den Code aus dem Tutorial auf Indy umzustellen ?
Nein, sicher nicht. Das Tutorial basiert auf non-blocking-sockets mit Ereignissen, Indy auf blocking-sockets und Threads. Das ist komplett was anderes. :idea:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
kuba67 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Fr 19.02.10 18:10 
Hallo,

ich hab mir einen neuen Code zusammengebastelt und erfolgreich in eins meiner Projekte integriert.
Den neuen Code habe ich beim Nachbarn gepostet: www.delphipraxis.net...l&highlight=kuba

Hat mir jedenfalls weitergeholfen, in jeglicher Hinsicht ...

kuba
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 19.02.10 18:27 
Moin!

user profile iconkuba67 hat folgendes geschrieben Zum zitierten Posting springen:
ich hab mir einen neuen Code zusammengebastelt und erfolgreich in eins meiner Projekte integriert.
Den neuen Code habe ich beim Nachbarn gepostet: www.delphipraxis.net...l&highlight=kuba
Ich hab mal grad über den Code geschaut: also wenn das in D2k10 sauber läuft, dann würde mich das schon wundern (es wird .ReceiveText() verwendet, das kann nicht klappen EDIT: es klappt doch mit der Methode, die Klasse ist in D2010 nämlich endlich korrekt umgestellt, nur d2k9 liefert hier einen Unicode-String, was falsch ist) ... :? Noch dazu ist der Code potentiell defekt, da davon ausgegangen wird, dass die Ereignisse synchron zu den Datenpaketen kommen, was allgemein ein schwerer Fehler ist. :shock:

cu
Narses

//EDIT: Aussage oben korrigiert; ändert aber nix daran, dass der verwendete Code kaputt ist. :nixweiss:

_________________
There are 10 types of people - those who understand binary and those who don´t.


Zuletzt bearbeitet von Narses am Mo 01.03.10 00:34, insgesamt 2-mal bearbeitet
kuba67 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Di 23.02.10 23:46 
Hab schon gemerkt, ist nicht ganz unproblematisch.

kuba
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mi 24.02.10 01:22 
Moin!

Ich denke, ich werde das Binär-Protokoll-Tutorial ziemlich sicher nicht nochmal neu schreiben, das ist mir einfach zu viel Arbeit. :nixweiss:

Aber es sieht so aus, als würde ich mir nochmal die TNBFPA-Kompos vornehmen und unicodesave machen. ;) Mal sehen, wie lange es dauert... :?

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 01.03.10 00:32 
Moin!

So, sollte klappen und ist hier zu haben. ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
kuba67 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: So 07.03.10 11:51 
cool :wink: