AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi IOHandler.ReadBytes: TIdBytes inkompatibler Typ ???
Thema durchsuchen
Ansicht
Themen-Optionen

IOHandler.ReadBytes: TIdBytes inkompatibler Typ ???

Ein Thema von OlafSt · begonnen am 1. Sep 2015 · letzter Beitrag vom 3. Sep 2015
Antwort Antwort
OlafSt

Registriert seit: 2. Mär 2007
Ort: Hamburg
284 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

IOHandler.ReadBytes: TIdBytes inkompatibler Typ ???

  Alt 1. Sep 2015, 15:21
Hallo Freunde,

so langsam ist es wohl an der Zeit, meinen Job an den Nagel zu hängen und Gärtner zu werden.

Folgende, extrem simple Routine:
Delphi-Quellcode:
//Compiler ist Delphi XE4 Professional
uses
     IdBaseComponent, IdComponent, IdSocketHandle,
     IdGlobal, IdContext, IdCustomTCPServer, IdTCPServer,
     IdIOHandler;

[...]

procedure TCUD_Main.MyTCPServerExecute(AContext: TIdContext);
var
   W: Word;
   b: byte;
   Block: IdGlobal.TIdBytes;
begin
     //
     w:=AContext.Connection.IOHandler.ReadWord;
     if (w <> $4711) then
     begin
          exit;
     end;
     b:=AContext.Connection.IOHandler.ReadByte;
     Setlength(Block, b);
     Block:=AContext.Connection.IOHandler.ReadBytes(Block, b, false);
end;
Daran ist ja nun nix schlimmes. Mein XE4 mein nun in der Zeile "Block:=AContext.Conn...":

Fehler E2010 Inkompatible Typen: 'TIdBytes' und 'procedure, untyped pointer or untyped parameter'

Ctrl-Click auf ReadBytes ergibt:procedure TIdIOHandler.ReadBytes(var VBuffer: TIdBytes; AByteCount: Integer; AAppend: Boolean = True); Was ist denn nu schon wieder kaputt ?
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: IOHandler.ReadBytes: TIdBytes inkompatibler Typ ???

  Alt 1. Sep 2015, 15:24
Warum machst dus nicht einfach so wies dort steht? Einfach das Block:= weglassen.

AContext.Connection.IOHandler.ReadBytes(Block, b, false);
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
OlafSt

Registriert seit: 2. Mär 2007
Ort: Hamburg
284 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: IOHandler.ReadBytes: TIdBytes inkompatibler Typ ???

  Alt 2. Sep 2015, 10:32
Okay... Das ist der Beweis, das ich echt urlaubsreif bin. Jetzt kann ich Prozeduren nicht mehr von Funktionen unterscheidem
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.052 Beiträge
 
Delphi 12 Athens
 
#4

AW: IOHandler.ReadBytes: TIdBytes inkompatibler Typ ???

  Alt 2. Sep 2015, 15:37
TIdBytes und TBytes sind nicht das "Selber", auch wenn sie das "Gleiche" sein mögen.

Leider ist man bei (vorallem Emba) nicht auf die geniale Idee gekommen und hat es (nicht) als TArray<Byte> deklariert.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
OlafSt

Registriert seit: 2. Mär 2007
Ort: Hamburg
284 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: IOHandler.ReadBytes: TIdBytes inkompatibler Typ ???

  Alt 3. Sep 2015, 12:51
Nunja... Wenn man sieht, wie Emba Generics compilertechnisch implementiert hat, kann ich das verstehen. Teile der VCL und natürlich Indy selbst wären in der Größe explodiert und die Größen der EXE-Dateien - ohnehin schon reichlich fett - wären noch heftiger geworden.

Ich frage mich, wie Microsoft in C# / VB.NET die Sache mit den Generics gelöst hat. Code wird jedenfalls nicht dupliziert.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.156 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: IOHandler.ReadBytes: TIdBytes inkompatibler Typ ???

  Alt 3. Sep 2015, 12:54
Ich kenne mich technisch so weit unten nicht aus, aber ich glaube Delphi ist technisch wesentlich näher an dem dran was man in C++ als Templates kennt. Da wird der Code auch dupliziert, aber in den Toolsets sind die Linker so schlau das wieder zu 99% herauszukürzen. Delphi ist da wohl noch nicht so weit.

Wie Generics in JIT-Sprachen wie Java oder .NET implementiert sind habe ich ehrlich gesagt keine Ahnung.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: IOHandler.ReadBytes: TIdBytes inkompatibler Typ ???

  Alt 3. Sep 2015, 13:02
Ich frage mich, wie Microsoft in C# / VB.NET die Sache mit den Generics gelöst hat. Code wird jedenfalls nicht dupliziert.
Woher willst du das wissen? Was schaust du dir an, um das zu beurteilen? Die erzeugte EXE?

Wie das dort umgesetzt ist, kann ich auch nicht sagen, aber ich weiß, dass dieser erzeugte Code vor der Ausführung nochmals compiliert wird (JIT wie Günther schon geschrieben hat). Dieses müsste man sich konkret anschauen um eine zuverlässige Aussage treffen zu können.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von frankyboy1974
frankyboy1974

Registriert seit: 7. Apr 2015
Ort: SH
169 Beiträge
 
Delphi XE7 Professional
 
#8

AW: IOHandler.ReadBytes: TIdBytes inkompatibler Typ ???

  Alt 3. Sep 2015, 13:24
Hallo,

in Java wird der Code zuerst in einen Bytecode übersetzt, und erst zur Laufzeit dann in Maschinensprache schlussübersetzt (ob nun JIT oder nicht), ich habe zwar noch nie eine Java-VM programmiert, kann mir aber kaum vorstellen, dass es schneller geht, erst zu überprüfen ob bereits eine ähnliche Prommierlogik bereits übersetzt wurden ist oder es direkt in Maschinensprache zu übersetzen. Also ich würde davon ausgehen, dass eine Java-VM, durchaus Code dupliziert wieder gibt.

mfg
Java ist auch eine Insel.
Ist Delphi von Oracle?
In meiner Buchstabensuppen fehlt das C++!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: IOHandler.ReadBytes: TIdBytes inkompatibler Typ ???

  Alt 3. Sep 2015, 13:27
Java/.Net verwendet Hotspot/JIT. So können grundsätzlich Entscheidungen in Folge von vorigen Läufen getroffen werden.
Zunehmend findet auch AOT-Kompilierung statt (z.B. ART).
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:28 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