AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

"strong alias" / "weak alias"?

Ein Thema von freimatz · begonnen am 24. Feb 2024 · letzter Beitrag vom 24. Feb 2024
 
Benutzerbild von himitsu
himitsu

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

AW: "strong alias" / "weak alias"?

  Alt 24. Feb 2024, 10:30
Gute Frage, laut Hilfe (DocWiki) gibt es in C++ ein Attribut, für Weak-Typen.
https://docwiki.embarcadero.com/RADS.../GNU-Attribute
Im Delphi probiert, funktioniert es nicht.
Delphi-Quellcode:
type
  [Weak] NewInt = type Integer; // wirkungslos (keine CompilerWarnung, aber Weak hat eh nur eine Wirkung auf Variablen mit Managed-Types ala Interface)
  NewInt = [Weak] type Integer; // compiliert nicht
  NewInt = type [Weak] Integer; // compiliert nicht
Prinzipiell gibt es das schon ewig, aber das Verhalten des Compilers hat sich geändert
und dementsprechend haben sie einige "ihrer" Typen ab jetzt anders deklariert,
Scheinbar war NativeInt früher sowas wie ein type Integer und ist nun nur noch Integer .

Aber der Compiler und CodeInsight behandeln nun "Alias" anders.
Früher wurde beim CodeInsight (CodeCompletion) und HelpInsight (Hint mit Deklaration) immer der "ursprüngliche" Typ angezeigt, aber jetzt der "Deklarierte".
Und das hat endlich einen enormen Vorteil, denn wenn du dir im Editor die Deklaration von SendMessage ansiehst, dann steht dort endlich LPARAM/WPARAM/LRESULT und nicht nur NativeInt, bzw. ganz früher Integer.
siehe Anhang -> HWND ist ein eigener Typ (stong-type) und der Rest nur ein Alias (weak-type)

Delphi-Quellcode:
type
  AliasInt = Integer;
  NewInt = type Integer;

  TTest = record
    procedure doIt(I: Integer); overload;
    procedure doIt(I: Int64); overload;
  //procedure doIt(I: NativeInt); overload; // unter D11 konnte man das noch deklarieren, da NativeInt ein "eigener" Typ war
  //procedure doIt(I: AliasInt); overload; // geht nicht, weil ist Typ "identisch" mit Integer
    procedure doIt(I: NewInt); overload;
  end;

procedure TForm2.FormCreate(Sender: TObject);
var
  i4: Integer; // Int32 = Integer
  i8: Int64;
  ix: NativeInt;
  ai: AliasInt;
  ni: NewInt;
  lp: LPARAM; // LPARAM = INT_PTR = IntPtr = NativeInt
  Test: TTest;
begin
  Test.doIt(i4);
  Test.doIt(i8);
  Test.doIt(ix); // im D11 weiß NativeInt nicht wo hint, alo ob Integer oder NewInt
  Test.doIt(ai); // Links die Maus über "ai" halten - früher wurde es überall als "Integer" angezeigt, jetzt als "AliasInt"
  Test.doIt(ni);
  Test.doIt(lp); // seid D12 wird es als "LPARAM" angezeigt, aber früher als "NativeInt"
end;

procedure TTest.doIt(I: Integer);
begin
end;

procedure TTest.doIt(I: Int64);
begin
end;

{procedure TTest.doIt(I: NativeInt);
begin
end;}


procedure TTest.doIt(I: NewInt);
begin
end;

PS: Ich hab soeben beim "Verantwortlichen" nochmal nachgefragt ... mal sehn ob/was er antwortet.
https://blog.marcocantu.com/blog/202...eak-alias.html
Angehängte Grafiken
Dateityp: png LPARAM.png (15,9 KB, 13x aufgerufen)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (24. Feb 2024 um 10:56 Uhr)
  Mit Zitat antworten Zitat
 


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 20:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz