Mode Delphi oder Objfpc

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
harrybonn
Beiträge: 101
Registriert: Fr 7. Jan 2011, 15:18

Mode Delphi oder Objfpc

Beitrag von harrybonn »

1. Was würdet Ihr als Standard empfehlen?

2. Warum compiliert der untenstehende Code im Mode Delphi, aber nicht in objfpc?

Code: Alles auswählen

 
TF_NetCom = class (Tobject)
    Client: TIdTCPClient;
    Server: TIdTCPServer;
    PollingTimer: TTimer;
    constructor Create;
    procedure ServerExecute(AContext: TIdContext);
 
    procedure PollingTimerTimer(Sender: TObject);
  private
    { Private-Deklarationen }
  public  
  //...
 
....
begin
  PollingTimer := TTimer.Create(NIL);
  PollingTimer.Enabled := false;
  PollingTimer.Interval := 5000;
  PollingTimer.OnTimer := PollingTimerTimer; // <--- hier wird gemeckert
end;
 
Meckertext: FNetCom.pas(841,44) Error: Wrong number of parameters specified for call to "PollingTimerTimer"

Was müsste ich ändern, damit es auch im mode objfpc compiliert?

wp_xyz
Beiträge: 5154
Registriert: Fr 8. Apr 2011, 09:01

Re: Mode Delphi oder Objfpc

Beitrag von wp_xyz »

harrybonn hat geschrieben:1. Was würdet Ihr als Standard empfehlen?
Für mich persönlich ganz klar ObjFPC, weil hier der Quelltext viel genauer untersucht wird (siehe auch gleich 2.)
harrybonn hat geschrieben:2. Warum compiliert der untenstehende Code im Mode Delphi, aber nicht in objfpc?

Code: Alles auswählen

  PollingTimer.OnTimer := PollingTimerTimer; // <--- hier wird gemeckert 
Meckertext: FNetCom.pas(841,44) Error: Wrong number of parameters specified for call to "PollingTimerTimer" Was müsste ich ändern, damit es auch im mode objfpc compiliert?
Im Modus ObjFPC möchte FPC die Prozedur PollingTimerTimer ausführen, kann das aber nicht, weil die benötigten Parameter nicht angegeben sind. Du willst hier aber die Funktion gar nicht ausführen, sondern dem OnTimer-Event die Adresse der Prozedur PollingTimerTimer zuweisen, daher musst du nur ein @ vor das PollingTimerTimer setzen. Beim Delphi-Modus kann das entfallen, obwohl es eigentlich "falsch" ist.

harrybonn
Beiträge: 101
Registriert: Fr 7. Jan 2011, 15:18

Re: Mode Delphi oder Objfpc

Beitrag von harrybonn »

Oh, danke. Hätte ich ja fast auch selbst drauf kommen können, aber der Hinweis zu den falschen Parametern hat mich ein wenig in die Irre geleitet.

harrybonn
Beiträge: 101
Registriert: Fr 7. Jan 2011, 15:18

Re: Mode Delphi oder Objfpc

Beitrag von harrybonn »

Kann man das unit-weise unterschiedlich halten oder ist da Einheitlichkeit zu empfehlen?

wp_xyz
Beiträge: 5154
Registriert: Fr 8. Apr 2011, 09:01

Re: Mode Delphi oder Objfpc

Beitrag von wp_xyz »

Den Compiler-Modus im selben Projekt von Unit zu Unit zu ändern, ist kein Problem. Innerhalb derselben Unit kann man aber nicht mehr wechseln (wird ignoriert).

harrybonn
Beiträge: 101
Registriert: Fr 7. Jan 2011, 15:18

Re: Mode Delphi oder Objfpc

Beitrag von harrybonn »

Danke erst mal für die Antworten.

Hab ich das richtig verstanden, dass in Units mit mode objfpc strings automatisch Unicodestrings sind und in mode Delphi sind es Ansistrings?

wp_xyz
Beiträge: 5154
Registriert: Fr 8. Apr 2011, 09:01

Re: Mode Delphi oder Objfpc

Beitrag von wp_xyz »

Die Units sind utf8, egal welchen Compiler-Mode du verwendest. Im Delphi-Modus sind die Strings, die in der Unit deklariert sind, Ansistrings, und im ObjFPC-Modus die "alten" ShortStrings aus Turbozeiten - daher steht hinter [$mode objfpc} immer das {$H+}, was sie auch zu Ansistrings macht. Bei fpc3 könnte das etwas anders sein, da fühle ich noch etwas schwankenden Boden unter mir, aber in der Defaulteinstellung sollte sich nichts ändern.

http://www.freepascal.org/docs-html/pro ... 87-302000D

marcov
Beiträge: 1102
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Mode Delphi oder Objfpc

Beitrag von marcov »

Ich nutze einfach weg mode Delphi. Die Unterschieden sind meist recht unbedeutend. Es gibt ein paar Sonderfalle die besser behandelt werden, aber die sind recht außergewöhnlich. (wie zurückgeben von Prozedurtypen als Funktionsresultat und die danach anrufen usw)

Warf
Beiträge: 2122
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Mode Delphi oder Objfpc

Beitrag von Warf »

ich nutze ObjFPC wegen operatoren überladen, das ist in Delphi sehr umständlich

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Mode Delphi oder Objfpc

Beitrag von Michl »

Ich nutze zumeist {$mode objfpc}{$H+}, da mir mal ein Fehler unterlaufen war, als ich mit der Programmierung wieder angefangen hatte, der mir bis heute in Erinnerung geblieben ist.

Dieser Code kompiliert ohne Probleme in {$mode delphi}, in {$mode objfpc} zum Glück nicht:

Code: Alles auswählen

  TForm1 = class(TForm)
  private
    Name: String;
  end;
Die Kompilierung in ObjFPC wird mit folgender Fehlermeldung verhindert: Error: Duplicate identifier "Name"

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

harrybonn
Beiträge: 101
Registriert: Fr 7. Jan 2011, 15:18

Re: Mode Delphi oder Objfpc

Beitrag von harrybonn »

Danke für die Hinweise.

Werde es jetzt so machen: Neue Units werde ich mit Objfpc verwenden, diejenigen, welche ich von Delphi übernommen habe, belasse ich erstmal auf Mode Delphi und stelle die mal um, wenn ich Zeit habe (wenn das jemals zutreffen sollte...)

Antworten