AGB  ·  Datenschutz  ·  Impressum  







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

DLL um Schnittstellenparameter zu sparen

Ein Thema von bernhard_LA · begonnen am 17. Okt 2013 · letzter Beitrag vom 19. Okt 2013
Antwort Antwort
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#1

AW: DLL um Schnittstellenparameter zu sparen

  Alt 17. Okt 2013, 23:06
Gibt es in DELPHI Static Datentypen ? (siehe VB Beispiel)
Nein, und ich würde sagen zum Glück.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: DLL um Schnittstellenparameter zu sparen

  Alt 17. Okt 2013, 23:19
Was sind Static-DataTypes?


Nunja, typisierte Konstanten, auch Lokale, sind sowas, wenn STATIC das ist, was ich denke.

ABER, es ist nicht unbedingt ein guter Stil, wenn man den Schreibschutz von Konstanten deaktivert.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#3

AW: DLL um Schnittstellenparameter zu sparen

  Alt 18. Okt 2013, 00:03
Beschreibbare Konstanten sind für mich ein Hack. Da fällt mir noch ein weiterer ein:
Delphi-Quellcode:
procedure Foo;
type
  TDummyClass = class
    class var StaticVar: integer;
  end;
begin
  TDummyClass.StaticVar := TDummyClass.StaticVar + 1;
end;
Aber bitte sowas nicht tun.
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#4

AW: DLL um Schnittstellenparameter zu sparen

  Alt 18. Okt 2013, 07:08
Private statische Variablen sind nicht-lokal beschreibbar? Das wäre ja ein Graus. Wenn nicht, ist deine Anmerkung überflüssig, denn lokale Variablen/private Felder sind immer beschreibbar.

Aber Ich denke, Du verwechselst 'static' mit 'const', es gilt aber 'static' = 'class var'. Und 'var' steht nicht für 'konstant'. Und auch nicht für 'varscheinlich konstant'


Eine statische (Class-) Variable ist übrigens eine Variable, die nicht der Instanz zugeordnet ist, sondern der Klasse. Also sowas wie (globale) Variablen.

Delphi-Quellcode:
Type
  TStaticClass = class
    private class Var hidden : TSomeType;
    public class Var known : TSomeType;
  end;

// Entspricht von der Sichtbarkeit

Unit TStaticUnit;
Interface
Var
  known : TSomeType;
Implementation
  hidden : TSomeType;
End.
Old school würde man eine Read-Only Variable (was hier noch besser wäre, aber dann bräuchte man einen statischen Konstruktor) als Funktion (z.B. Printer, Clipboard) umsetzen;
Delphi-Quellcode:
Unit Stuff;
interface
  function DataAccess : TSomeType;
implementation
Var
  _dataAccess : TSomeType;

Function DataAccess : TSomeType;
Begin
  Result := _dataAccess;
End;

// Oder mit Lazy load
Function DataAccess : TSomeType;
Begin
  if _dataAccess = nil then _dataAccess := CreateDataAccess;
  Result := _dataAccess;
End;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: DLL um Schnittstellenparameter zu sparen

  Alt 18. Okt 2013, 08:35
OK, wenn STATIC = Class Var, dann isses schon nicht mehr so böse.

Im Prinzip geht aber auch sowas, aber ich verrate jetzt nicht die beiden Wege (den "offiziellen", der aber nur aus Kompatibilitätsgründen zu extrem alten Delphi-Codes vorhanden ist und den ganz bösen Hack, der mit mal passiert ist, als ausversehn die globale Konstante für einen leeren String '' zerschossen wurde, was nicht gut endete).

Delphi-Quellcode:
function Test(i: Integer): Integer;
const
  Temp: Integer = 0;
begin
  Inc(Temp, i);
  Result := Temp;
end;
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#6

AW: DLL um Schnittstellenparameter zu sparen

  Alt 19. Okt 2013, 03:34
Private statische Variablen sind nicht-lokal beschreibbar? Das wäre ja ein Graus. Wenn nicht, ist deine Anmerkung überflüssig, denn lokale Variablen/private Felder sind immer beschreibbar.

Aber Ich denke, Du verwechselst 'static' mit 'const', es gilt aber 'static' = 'class var'. Und 'var' steht nicht für 'konstant'. Und auch nicht für 'varscheinlich konstant'
Ich weiß, was der Unterschied zwischen static und const ist. Ich bezog mich auf das, was himitsu im vorherigen Beitrag angedeutet hatte. Es ist in Delphi tatsächlich mithilfe eines Compilerswitches möglich, dass typisierte konstanten eben nicht konstant sind, sondern gerade beschreibbar, so wie globale Variablen. Siehe himitsus Beispiel im Post über mir.

Größtes WTF in der ganzen Sprache.

Mein Code ist eigentlich schon eine 1:1-Entsprechung einer „methoden-statischen“ Variable à la PHP & Co. in Delphi. Aber sich extra eine Dummy-Klasse deklarieren, nur damit man eine globale Variable hat, auf die man nur in einer einzigen Routine zugreifen kann, kann irgendwie keine Lösung sein, und deshalb rate ich davon ab.

Ich halte von statischen Variablen in Methoden aber auch generell nichts.

Geändert von Namenloser (19. Okt 2013 um 03:54 Uhr)
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#7

AW: DLL um Schnittstellenparameter zu sparen

  Alt 19. Okt 2013, 08:41
Na, wenn Du ein neues Wort für 'static field', oder 'class var' einführen willst, nämlich 'methoden-statisch'... bitte sehr.
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#8

AW: DLL um Schnittstellenparameter zu sparen

  Alt 19. Okt 2013, 16:56
Na, wenn Du ein neues Wort für 'static field', oder 'class var' einführen willst, nämlich 'methoden-statisch'... bitte sehr.
Das eine ist in einer Klasse deklariert, das andere in einer Methode (oder Funktion/Procedure, muss ja nicht zu einer Klasse gehören). Was ist daran so schwer zu verstehen?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.731 Beiträge
 
Delphi 12 Athens
 
#9

AW: DLL um Schnittstellenparameter zu sparen

  Alt 19. Okt 2013, 09:48
Es ist in Delphi tatsächlich mithilfe eines Compilerswitches möglich, dass typisierte konstanten eben nicht konstant sind, sondern gerade beschreibbar, so wie globale Variablen. Siehe himitsus Beispiel im Post über mir.

Größtes WTF in der ganzen Sprache.
Den Schalter gibt es nur aus Gründen der Abwärtskompatibilität. Als es in Delphi noch keine initialisierten globalen Variablen gab, waren die veränderbaren Konstanten der einzige Weg sowas zu realisieren. Dieser ominöse Schalter sollte somit auch nur für noch nicht portierten Code Anwendung finden. Allerdings ist dieses Feature, wie so oft, auch schon zu anderen Zwecken missbraucht worden. Um auch zu solchen Code kompatibel zu bleiben, wird es den Schalter wohl noch eine ganze Weile geben.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#10

AW: DLL um Schnittstellenparameter zu sparen

  Alt 19. Okt 2013, 12:05
Als es in Delphi noch keine initialisierten globalen Variablen gab, waren die veränderbaren Konstanten der einzige Weg sowas zu realisieren.
Öhm...
Delphi-Quellcode:
Var
  global : String;

initialization
  global :='Initialized Value';
end.
So hab ich das immer gemacht.

Schon bei Turbo-Pascal (DOS) waren Konstanten veränderbar. Konstanten wurden nicht als Platzhalter kompiliert (wie z.B. bei C und '#define'), sondern hatten eine eigene Adresse im Speicher. Und da kann man nunmal reinschreiben. Blöde Sache, damals. Aber so war es nun mal.
  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 13:38 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