Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu
Online

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

AW: Generic <T>, injected DLL, was aus Speicher auslesen?

  Alt 25. Jan 2014, 18:35
Jain, das ist fast möglich, oder kann Delphi inzwischen doch schon generischen Prozeduren?
Und wenn nicht, dann solltest du im Profil, oder nächstes Mal im Post, mit angeben, für welchen Compiler du etwas suchst.

Aber wenn du deine Funktion in eine Klasse verlagerst, wo es auch eine Klassenmethode sein kann, welche als Static im Kompilat praktisch genauso auferufen wird, wie eine entsprechende "normale" Funktion, dann ginge es.


Wieso eigentlich Offset?
OK, zum nil wäre es ein Offset, aber im Prinzip gibst du doch direkt deine Adresse an.

Delphi-Quellcode:
class function TMyClass.GetMem<T>(Addr: Pointer): T; // Nja, oder zumindestens auch nochmal mit NativeUInt überladen.
type
  PT = ^T; // oder als public/private type direkt oben in der Klassendefinition
begin
  Result := PT(Offset)^;
end;

// geht eventuell auch "direkt"

class function TMyClass.GetMem<T>(Addr: Pointer): T;
begin
  Result := T(Offset^);
end;
Nur wozu soll das Ganze gut sein?

Ohne z.B. auch noch eine Typ-Konvertierung (ala Byte zu Integer oder String), ist das doch etwas "umständlich"?
Also im Gegensatz zum direkten Cast?
Vorallem ohne "inline" sind hier nun unnötige Codesprünge und bei Typen womöglich auch noch unnötige Speicheroperationen. (Referenzzählung von String und Interface, oder gar komplette Kopien, wie z.B. beim WideString)


Delphi-Quellcode:
i := PInteger($123456)^;

i := {TMyClass.}GetMem<Integer>($123456);
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (25. Jan 2014 um 18:45 Uhr)
  Mit Zitat antworten Zitat