Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi ScktComp unter Delphi 2009 anpassen (https://www.delphipraxis.net/132119-scktcomp-unter-delphi-2009-anpassen.html)

hadschi92 6. Apr 2009 16:33


ScktComp unter Delphi 2009 anpassen
 
Da die Sockets in Delphi 2009 dank Unicode teilweise nicht mehr funktionieren ist mir die Idee gekommen die Unit einfach umzuschreiben. Das wird wahrscheinlich einfacher sein, als seine ganzen Projekte umzuschreiben.

Was müsste dabei alles umgeschrieben werden? Ich hab mit die Unit kurz angeschaut, sie beinhaltet ca. 2000 Zeilen Code, also nicht gerade übermäßig viel, es sollte doch möglich sein? Kann mir einer einen Denkanstoß geben, welche Prozeduren nicht funktionieren und wie man es lösen kann. Einfach den eingegebenen String in einen AnsiString umwandeln?

Oder einer von euch schreibt das Ding um, aber von solchen Sachen bin ich nicht so der Favourit, ich möchte kapieren was ich ändere und warum.

Achja, sagt es mir bitte gleich wenn das Ganze nicht funktionieren wird und bitte mit Begründung :wink:

Bernhard Geyer 6. Apr 2009 16:46

Re: ScktComp unter Delphi 2009 anpassen
 
Zitat:

Zitat von hadschi92
Da die Sockets in Delphi 2009 dank Unicode teilweise nicht mehr funktionieren ist mir die Idee gekommen die Unit einfach umzuschreiben.

Was funktioniert denn nicht?

hadschi92 6. Apr 2009 17:58

Re: ScktComp unter Delphi 2009 anpassen
 
Um nicht alles erklären zu müssen: https://forums.codegear.com/thread.jspa?messageID=70567

Dort wird auch eine Lösung beschrieben, jedoch seinen gesamten Quelltext alter Projekte deshalb zu ändern ist nicht gerade produktiv. Daher könnte man die ScktComp.pas so anpassen, dass Strings von vorne herein gleich richtig konvertiert werden.

Edit: ReceiveText z.B. ist kaputt, in der ScktComp-Unit sieht die Funktion so aus:
Delphi-Quellcode:
function TCustomWinSocket.ReceiveText: string;
begin
  SetLength(Result, ReceiveBuf(Pointer(nil)^, -1));
  SetLength(Result, ReceiveBuf(Pointer(Result)^, Length(Result)));
end;
Ich müsste also zuerst mit ReceiveBuf das Empfangene einlesen, dann in einen AnsiString schreiben und den dann in Unicode konvertieren...
Könnte das danach so aussehen? Stimmt der Code dann auch?
Delphi-Quellcode:
function TCustomWinSocket.ReceiveText: string;
var S: AnsiString;
begin
  SetLength(S, ReceiveBuf(Pointer(nil)^, -1));
  SetLength(S, ReceiveBuf(Pointer(S)^, Length(S)));
  Result := String(S);
end;
Ok, wahrscheinlich sind noch mehr Funktionen bisschen verbuggt, nur weiß ich nicht welche...

hadschi92 7. Apr 2009 19:42

Re: ScktComp unter Delphi 2009 anpassen
 
Ok, das ganze hat jetzt geklappt. Eventuell sind noch weitere Funktionen bisschen kaputt, wenn ich Fehler finde schreibe ich sie hier rein.
Also falls bei jemandem die Sockets nicht ganz unter Delphi 2009 funktionieren, dann einfach die ScktComp-Unit nehmen, die Zeilen wie im Post darüber beschrieben abändern und dann die Unit kompilieren. Einfach die Unit in den Ordner eines Projekts einfügen und die Unit in diesem Projekt oder Programm verwenden, das ganze kompilieren, dann wird eine .dcu Datei erstellt.

Die originalen ScktComp.pas und ScktComp.dcu könnt ihr jetzt mit den neu kompilierten ersetzen.

Wer Fehler oder Anregungen findet bitte melden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:23 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz