Delphi-PRAXiS
Seite 70 von 192   « Erste     2060686970 717280120170     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Klatsch und Tratsch (https://www.delphipraxis.net/34-klatsch-und-tratsch/)
-   -   Was nervt euch so, während der Programmierung oder so allgemein (https://www.delphipraxis.net/152540-nervt-euch-so-waehrend-der-programmierung-oder-so-allgemein.html)

himitsu 24. Nov 2011 12:25

AW: Was nervt euch so, wärend der Programmierung oder so allgemein
 
Zitat:

Zitat von jaenicke (Beitrag 1137664)
Office fragt aber vorher, ...

Aber nur wenn es ordentlich beendet wird.

Leider mischt sich auch eine RDP-Verbindung in die Zwischenablage ein (wenn es aktiviert ist), was mir auf Arbeit schon einige Male den Zwischenspeicher gelöscht/überschrieben hat.
Du hast dir was kopiert, dann schwups auf's falsche [X] gekommen oder die Verbindung ist abgebrochen und weg war es.

himitsu 3. Dez 2011 18:24

AW: Was nervt euch so, wärend der Programmierung oder so allgemein
 
Zitat:

Zitat von D2010
Delphi-Quellcode:
procedure BinToHex(var Buffer; Text: PWideChar; BufSize: Integer); overload; inline;
procedure BinToHex(var Buffer; Text: PAnsiChar; BufSize: Integer); overload; inline;

Wer ist eigentlich auf die saublöde Idee gekommen einen Leseparameter als VAR zu deklarieren?
Soein Schwachsinn nervt ja sowas von.

Schön, daß es zwar soeine Variante gibt, aber um meinen Const-Parameter umzuwandeln, muß ich nun doch die Pointer-BinToHex-Variante nutzen. :wall:

implementation 3. Dez 2011 18:41

AW: Was nervt euch so, wärend der Programmierung oder so allgemein
 
Weil Buffer typenlos ist -> In Fact ist
Delphi-Quellcode:
var Buffer
nichts anderes als
Delphi-Quellcode:
const Buffer: Pointer
.
Angenommen, Buffer wäre kein Var-Parameter, woher soll Delphi dann wissen, wieviel Speicher es übergeben soll?
Dazu bräuchte man dann wieder ne Menge Compiler-Magic.

Namenloser 3. Dez 2011 19:03

AW: Was nervt euch so, wärend der Programmierung oder so allgemein
 
Zitat:

Zitat von implementation (Beitrag 1139138)
Weil Buffer typenlos ist -> In Fact ist
Delphi-Quellcode:
var Buffer
nichts anderes als
Delphi-Quellcode:
const Buffer: Pointer
.
Angenommen, Buffer wäre kein Var-Parameter, woher soll Delphi dann wissen, wieviel Speicher es übergeben soll?
Dazu bräuchte man dann wieder ne Menge Compiler-Magic.

Wie du schon sagst, sind
Delphi-Quellcode:
var
und
Delphi-Quellcode:
const
technisch das gleiche. Der Unterschied ist: Du kannst einen var-Parameter an eine Subroutine mit const-Parameter übergeben, aber nicht einen const-Parameter an eine Subroutine mit var-Parameter.
Delphi-Quellcode:
procedure Bar(const Y: integer);
begin
  ...
end;

procedure Foo(var X: integer);
begin
  Bar(X);
end;
Geht.

Delphi-Quellcode:
procedure Bar(var Y: integer);
begin
  ...
end;

procedure Foo(const X: integer);
begin
  Bar(X);
end;
Geht NICHT.

himitsu 3. Dez 2011 19:57

AW: Was nervt euch so, wärend der Programmierung oder so allgemein
 
@implementation: So weit ist es ja alles klar, aber
das ist halt ein (ur)alter nerviger Bug, denn eigentlich müßte es so aussehn:
Delphi-Quellcode:
procedure BinToHex(const Buffer; Text: PWideChar; BufSize: Integer); overload; inline;
procedure BinToHex(const Buffer; Text: PAnsiChar; BufSize: Integer); overload; inline;
Hier wird ja eigentlich der Inhalt von "Text" verändert und nicht der von Buffer. :wall:

Und die Größe für Buffer und Text kommt eben über BufSize rein.

Stevie 3. Dez 2011 20:30

AW: Was nervt euch so, wärend der Programmierung oder so allgemein
 
Also in XE ist sie 6fach überladen, 2 davon sehen so aus:
Delphi-Quellcode:
procedure BinToHex(Buffer: Pointer; Text: PWideChar; BufSize: Integer); overload; inline;
procedure BinToHex(Buffer: Pointer; Text: PAnsiChar; BufSize: Integer); overload; inline;
Was spricht also dagegen, deinen const Parameter dort als Buffer hineinzugeben?

himitsu 3. Dez 2011 21:15

AW: Was nervt euch so, wärend der Programmierung oder so allgemein
 
Ein zusätzliches und eigentlich unnötiges @ ?

implementation 3. Dez 2011 21:19

AW: Was nervt euch so, wärend der Programmierung oder so allgemein
 
Zitat:

Zitat von NamenLozer (Beitrag 1139144)
Wie du schon sagst, sind
Delphi-Quellcode:
var
und
Delphi-Quellcode:
const
technisch das gleiche.

Nein, es geht mir nicht um var=const, sondern um var=Pointer.

Wie soll ich denn bitte
Delphi-Quellcode:
const Buffer
von einem unbestimmten Typen deklarieren, dessen Größe ich nicht kenne.
Bei Var geht das theoretisch, eben weil es nur ein Pointer ist.

Const übergibt den Wert (was hier ja gewünscht ist), aber das geht nur mit fester Größe.
Kein Typ heißt aber -> variable Größe.

Heißt: Eine Deklaration mit Const ist hier gar nicht möglich!

Zitat:

Zitat von himitsu (Beitrag 1139147)
Und die Größe für Buffer und Text kommt eben über BufSize rein.

Zur Laufzeit. Aber bei Const muss die Größe schon zur Kompilierungszeit bekannt sein, eben weil es kein Pointer ist.

Zitat:

Zitat von himitsu (Beitrag 1139163)
Ein zusätzliches und eigentlich unnötiges @ ?

Das ist aber reine Kosmetik, denn es kommt bei der Prozedur ja genauso an. Und das ist es ja, weshalb Const an der Stelle nicht geht.

himitsu 3. Dez 2011 22:07

AW: Was nervt euch so, wärend der Programmierung oder so allgemein
 
Nein, CONST übergibt, bei Typen über 64 Bit und bei dieser typlosen Variante (genauso wie VAR) eine Referenz.



Delphi-Quellcode:
procedure Test(const Buffer; X: Boolean = False);
type
  TArr = array[0..9] of Char;
begin
  if X then
    ShowMessage('$' + IntToHex(NativeInt(@Buffer), 8) + ' "' + TArr(Buffer)[5] + '"')
  else
    ShowMessage('$' + IntToHex(NativeInt(@Buffer), 8));
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  B: array[0..0] of Byte;
  S: String;
begin
  ShowMessage('$' + IntToHex(NativeInt(@B), 8));
  Test(B);

  S := '123456789';
  ShowMessage('$' + IntToHex(NativeInt(@S[3]), 8));
  Test(S[3], True);

Und es ist nicht einfach nur Kosmetik/Schönheit, sondern auch Symetrie ... ich übergebe eine Zeile weiter vorne diese Variable auch als CONST (Stream.WriteBuffer, wo dieses übrigens funktioniert) und würde es hier gerne genauso aufrufen = einheitlicher Code

implementation 3. Dez 2011 22:11

AW: Was nervt euch so, wärend der Programmierung oder so allgemein
 
Zitat:

Zitat von himitsu (Beitrag 1139174)
Nein, CONST übergibt, bei Typen über 64 Bit und bei dieser typlosen Variante (genauso wie VAR) eine Referenz.

So weit war ich noch nicht aufgeklärt, danke!


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:30 Uhr.
Seite 70 von 192   « Erste     2060686970 717280120170     Letzte »    

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