{$IFDEF Windows} und Delphi6

Für allgemeine Fragen zur Programmierung, welche nicht! direkt mit Lazarus zu tun haben.
Antworten
Mathias
Beiträge: 6899
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

{$IFDEF Windows} und Delphi6

Beitrag von Mathias »

Ich wollte meine SDL3 Bindung mal mit Delphi 6 testen. Ein neueres Delphi habe ich leider nicht.
Nur scheitert er schon an diesen Code-Schnipsel.

Code: Alles auswählen

uses
  {$IFDEF Linux}
  x, xlib;
  {$ENDIF}
  {$IFDEF Windows}
  Windows;
  {$ENDIF}
{$IFDEF Windows} wird nicht erkannt.

Einer eine Idee, wie man dies umgehen kann ?
Oder ist Delph6 einfach zu alt ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
theo
Beiträge: 10856
Registriert: Mo 11. Sep 2006, 19:01

Re: {$IFDEF Windows} und Delphi6

Beitrag von theo »

Vielleicht googlen?
Vielleicht MSWINDOWS?

https://docwiki.embarcadero.com/RADStud ... 8Delphi%29

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1637
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: {$IFDEF Windows} und Delphi6

Beitrag von fliegermichl »

Ich meine mich zu erinnern, dass {$ifdef win32} definiert war.

Mathias
Beiträge: 6899
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: {$IFDEF Windows} und Delphi6

Beitrag von Mathias »

Vielleicht MSWINDOWS?
Mit dem gehts, aber jetzt steht ich weiter an. Solches wie int16, int32, etc. wird auch nicht erkannt. Auch mit 64bit Zeugs hat er Probleme, welches Lazarus mit win32 kompiliert.

Ich denke der Aufwand es Delphi 6 kompatibel zu machen, lohnt sich nicht, da dieses Delphi schon fast 25 Jährig ist.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

alfware17
Beiträge: 210
Registriert: Di 14. Dez 2010, 23:27

Re: {$IFDEF Windows} und Delphi6

Beitrag von alfware17 »

Ich habe vor einiger Zeit mal mit solchen Abfragen experimentiert, allerdings unter Freepascal und Turbo-Pascal in verschiedenen Windows- und Linux- Umgebungen. Vielleicht ist das was dabei für dich.

Code: Alles auswählen

{ $DEFINE DOS}
{ $DEFINE LINUX}
{ $DEFINE LINUX_32}
{ $DEFINE LINUX_64}
{ $DEFINE WIN_3264}
{ $DEFINE WIN_32}
{ $DEFINE WIN_64}
{ $DEFINE BIT_16}
{$DEFINE BIT_32}
{ $DEFINE BIT_64}
{$DEFINE AUSGEBEN_SCHALTER}

procedure os_system;
begin
   Writeln('system: ' + {$IFNDEF DOS}       'NICHT ' + {$ENDIF} 'DOS');
   Writeln('system: ' + {$IFNDEF LINUX}     'NICHT ' + {$ENDIF} 'LINUX');
   Writeln('system: ' + {$IFNDEF WINDOWS}   'NICHT ' + {$ENDIF} 'WINDOWS');

   Writeln('system: ' + {$IFNDEF CPU16}     'NICHT ' + {$ENDIF} 'CPU16');
   Writeln('system: ' + {$IFNDEF CPU32}     'NICHT ' + {$ENDIF} 'CPU32');
   Writeln('system: ' + {$IFNDEF CPU64}     'NICHT ' + {$ENDIF} 'CPU64');

   Writeln('system: ' + {$IFNDEF CPUI8086}  'NICHT ' + {$ENDIF} 'CPUI8086');
   Writeln('system: ' + {$IFNDEF CPUI386}   'NICHT ' + {$ENDIF} 'CPUI386');
   Writeln('system: ' + {$IFNDEF CPU386}    'NICHT ' + {$ENDIF} 'CPU386');

   Writeln('system: ' + {$IFNDEF X86_64}    'NICHT ' + {$ENDIF} 'X86_64');
   Writeln('system: ' + {$IFNDEF CPUX86_64} 'NICHT ' + {$ENDIF} 'CPUX86_64');
   Writeln('system: ' + {$IFNDEF CPUX64}    'NICHT ' + {$ENDIF} 'CPUX64');
   Writeln('system: ' + {$IFNDEF CPUAMD64}  'NICHT ' + {$ENDIF} 'CPUAMD64');
end;

procedure os_pruefen;
begin
   {$IFDEF CPU32}
      {$IFDEF AUSGEBEN_SCHALTER} Writeln('Erkenne 32bit wegen CPU32'); {$ENDIF}
      {$DEFINE BIT_32} {$UNDEF BIT_16} {$UNDEF BIT_64}
   {$ENDIF}
   {$IFDEF CPU64}
      {$IFDEF AUSGEBEN_SCHALTER} Writeln('Erkenne 64bit wegen CPU64'); {$ENDIF}
      {$DEFINE BIT_64} {$UNDEF BIT_16} {$UNDEF BIT_32}
   {$ENDIF}
   {$IFDEF CPU16}
      {$IFDEF AUSGEBEN_SCHALTER} Writeln('Erkenne 16bit wegen CPU16'); {$ENDIF}
      {$DEFINE BIT_16} {$UNDEF BIT_32} {$UNDEF BIT_64}
   {$ENDIF}

   {$IFDEF CPU386}
      {$IFDEF AUSGEBEN_SCHALTER} Writeln('Erkenne 32bit wegen CPU386'); {$ENDIF}
      {$DEFINE BIT_32} {$UNDEF BIT_16} {$UNDEF BIT_64}
   {$ENDIF}
   {$IFDEF CPUI386}
      {$IFDEF AUSGEBEN_SCHALTER} Writeln('Erkenne 32bit wegen CPUI386'); {$ENDIF}
      {$DEFINE BIT_32} {$UNDEF BIT_16} {$UNDEF BIT_64}
   {$ENDIF}

   {$IFDEF X86_64}
      {$IFDEF AUSGEBEN_SCHALTER} Writeln('Erkenne 64bit wegen X86_64'); {$ENDIF}
      {$DEFINE BIT_64} {$UNDEF BIT_16} {$UNDEF BIT_32}
   {$ENDIF}
   {$IFDEF CPUX64}
      {$IFDEF AUSGEBEN_SCHALTER} Writeln('Erkenne 64bit wegen CPUX64'); {$ENDIF}
      {$DEFINE BIT_64} {$UNDEF BIT_16} {$UNDEF BIT_32}
   {$ENDIF}
   {$IFDEF CPUAMD64}
      {$IFDEF AUSGEBEN_SCHALTER} Writeln('Erkenne 64bit wegen CPUAMD64'); {$ENDIF}
      {$DEFINE BIT_64} {$UNDEF BIT_16} {$UNDEF BIT_32}
   {$ENDIF}

   {$IFDEF CPUI8086}
      {$IFDEF AUSGEBEN_SCHALTER} Writeln('Erkenne 16bit wegen CPUI8086'); {$ENDIF}
      {$DEFINE BIT_16} {$UNDEF BIT_32} {$UNDEF BIT_64}
   {$ENDIF}

   {$IFDEF WIN_32}
      {$IFDEF AUSGEBEN_SCHALTER} Writeln('Erkenne 32bit wegen WIN_32'); {$ENDIF}
      {$DEFINE BIT_32} {$UNDEF BIT_16} {$UNDEF BIT_64}
   {$ENDIF}
   {$IFDEF WIN_64}
      {$IFDEF AUSGEBEN_SCHALTER} Writeln('Erkenne 64bit wegen WIN_64'); {$ENDIF}
      {$DEFINE BIT_64} {$UNDEF BIT_16} {$UNDEF BIT_32}
   {$ENDIF}
   {$IFDEF LINUX_32}
      {$IFDEF AUSGEBEN_SCHALTER} Writeln('Erkenne 32bit wegen LINUX_32'); {$ENDIF}
      {$DEFINE BIT_32} {$UNDEF BIT_16} {$UNDEF BIT_64}
   {$ENDIF}
   {$IFDEF LINUX_64}
      {$IFDEF AUSGEBEN_SCHALTER} Writeln('Erkenne 64bit wegen LINUX_64'); {$ENDIF}
      {$DEFINE BIT_64} {$UNDEF BIT_16} {$UNDEF BIT_32}
   {$ENDIF}
   {$IFDEF DOS}
      {$IFDEF AUSGEBEN_SCHALTER} Writeln('Erkenne 16bit'); {$ENDIF}
      {$DEFINE BIT_16} {$UNDEF BIT_32} {$UNDEF BIT_64}
   {$ENDIF}

   {$IFNDEF DOS} {$IFNDEF LINUX}
      {$IFDEF AUSGEBEN_SCHALTER} Writeln('Erkenne NICHT DOS UND NICHT LINUX, also: WINDOWS'); {$ENDIF}
      {$DEFINE WINDOWS} {$DEFINE WIN_3264} {$UNDEF LINUX_32} {$UNDEF LINUX_64}
   {$ENDIF} {$ENDIF}

   {$IFDEF WINDOWS}
      {$IFDEF AUSGEBEN_SCHALTER} Writeln('Erkenne WINDOWS, also: KEIN LINUX und KEIN DOS'); {$ENDIF}
      {$DEFINE WIN_3264} {$UNDEF LINUX} {$UNDEF LINUX_32} {$UNDEF LINUX_64} {$UNDEF DOS}
   {$ENDIF}
   {$IFDEF WIN_3264}
      {$IFDEF AUSGEBEN_SCHALTER} Writeln('Erkenne WIN_3264, also: KEIN LINUX und KEIN DOS'); {$ENDIF}
      {$DEFINE WINDOWS} {$UNDEF LINUX} {$UNDEF LINUX_32} {$UNDEF LINUX_64} {$UNDEF DOS}
   {$ENDIF}
   {$IFDEF LINUX}
      {$IFDEF AUSGEBEN_SCHALTER} Writeln('Erkenne LINUX, also: KEIN WINDOWS und KEIN DOS'); {$ENDIF}
      {$UNDEF WINDOWS} {$UNDEF WIN_3264} {$UNDEF WIN_32} {$UNDEF WIN_64} {$UNDEF DOS}
   {$ENDIF}
   {$IFDEF DOS}
      {$IFDEF AUSGEBEN_SCHALTER} Writeln('Erkenne DOS, also: KEIN WINDOWS und KEIN LINUX'); {$ENDIF}
      {$UNDEF WINDOWS} {$UNDEF WIN_3264} {$UNDEF WIN_32} {$UNDEF WIN_64} {$UNDEF LINUX} {$UNDEF LINUX_32} {$UNDEF LINUX_64}
   {$ENDIF}

   {$IFDEF WIN_3264} {$IFDEF BIT_32}
      {$IFDEF AUSGEBEN_SCHALTER} Writeln('Erkenne WINDOWS UND 32bit, also: WIN_32'); {$ENDIF}
      {$DEFINE WIN_32} {$UNDEF WIN_64}
   {$ENDIF} {$ENDIF}
   {$IFDEF WIN_3264} {$IFDEF BIT_64}
      {$IFDEF AUSGEBEN_SCHALTER} Writeln('Erkenne WINDOWS UND 64bit, also: WIN_64'); {$ENDIF}
      {$DEFINE WIN_64} {$UNDEF WIN_32}
   {$ENDIF} {$ENDIF}

   {$IFDEF LINUX} {$IFDEF BIT_32}
      {$IFDEF AUSGEBEN_SCHALTER} Writeln('Erkenne LINUX UND 32bit, also: LINUX_32'); {$ENDIF}
      {$DEFINE LINUX_32} {$UNDEF LINUX_64}
   {$ENDIF} {$ENDIF}
   {$IFDEF LINUX} {$IFDEF BIT_64}
      {$IFDEF AUSGEBEN_SCHALTER} Writeln('Erkenne LINUX UND 64bit, also: LINUX_64'); {$ENDIF}
      {$DEFINE LINUX_64} {$UNDEF LINUX_32}
   {$ENDIF} {$ENDIF}
   Writeln;
end;

procedure os_aktuell;
begin
   Writeln('aktuell: ' + {$IFNDEF DOS}       'NICHT ' + {$ENDIF} 'DOS');

   Writeln('aktuell: ' + {$IFNDEF LINUX}     'NICHT ' + {$ENDIF} 'LINUX');
   Writeln('aktuell: ' + {$IFNDEF LINUX_32}  'NICHT ' + {$ENDIF} 'LINUX_32');
   Writeln('aktuell: ' + {$IFNDEF LINUX_64}  'NICHT ' + {$ENDIF} 'LINUX_64');

   Writeln('aktuell: ' + {$IFNDEF WIN_3264}  'NICHT ' + {$ENDIF} 'WIN_3264');
   Writeln('aktuell: ' + {$IFNDEF WIN_32}    'NICHT ' + {$ENDIF} 'WIN_32');
   Writeln('aktuell: ' + {$IFNDEF WIN_64}    'NICHT ' + {$ENDIF} 'WIN_64');

   Writeln('aktuell: ' + {$IFNDEF BIT_16}    'NICHT ' + {$ENDIF} 'BIT_16');
   Writeln('aktuell: ' + {$IFNDEF BIT_32}    'NICHT ' + {$ENDIF} 'BIT_32');
   Writeln('aktuell: ' + {$IFNDEF BIT_64}    'NICHT ' + {$ENDIF} 'BIT_64');
end;

procedure compiler_check;
begin
   os_system; writeln;

   os_pruefen;

   os_aktuell;

end;
ansonsten habe ich gerade ein Delphi7-Buch verschenkt (nebst 30 anderen alten Büchern oder ist es noch im Keller?) - die Installationsdateien und den Freischaltecode (aus dem Buch) könnte ich dir aber geben (auf PN)

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

Re: {$IFDEF Windows} und Delphi6

Beitrag von wp_xyz »

https://wiki.freepascal.org/Platform_defines

Aber es ist nicht so, dass Delphi diese Defines kennt. Daher musst du eigentlich jedes Define in einen Zweig {$IFDEF FPC} für Lazarus/FPC und einen Zweig {$ELSE} für Delphi aufspalten:

Code: Alles auswählen

uses
  {$IFDEF FPC}           // <--- das ist für FPC/Lazarus
    {$IFDEF LINUX}x, xlib{$ENDIF}
    {$IFDEF MSWINDOWS}Windows{$ENDIF}
  {$ELSE}                // <--- das folgende für Delphi
    Windows;
  {$ENDIF} 

PascalDragon
Beiträge: 945
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: {$IFDEF Windows} und Delphi6

Beitrag von PascalDragon »

Mathias hat geschrieben: So 16. Feb 2025, 16:43
Vielleicht MSWINDOWS?
Mit dem gehts, aber jetzt steht ich weiter an. Solches wie int16, int32, etc. wird auch nicht erkannt. Auch mit 64bit Zeugs hat er Probleme, welches Lazarus mit win32 kompiliert.
Die IntN-Typen wurden erst in einer der neueren Delphi Versionen hinzugefügt, genauso wie der unsigned 64-Bit Typ UInt64 (Delphi kennt kein QWord).
FPC Compiler Entwickler

Mathias
Beiträge: 6899
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: {$IFDEF Windows} und Delphi6

Beitrag von Mathias »

Mit diesem kleinen Programm habe ich es hingekriegt, das SDL3 in meinem betagten Delphi6 läuft.
Somit läuft die Bindung.
Somit ist die Chance recht gross, das meine Package mit moderneren Delphi Versionen läuft.

Code: Alles auswählen

program Project2;

{$APPTYPE CONSOLE}

const
  {$IFDEF Linux}
  libSDL3 = 'SDL3';
  {$ENDIF}

  {$IFDEF msWindows}
  libSDL3 = 'SDL3';
  {$ENDIF}

  {$IFDEF Darwin}
  libSDL3 = 'libSDL3.dylib';
  {$ENDIF}

type
  TSDL_Window = record
  end;
  PSDL_Window = ^TSDL_Window;

const
  SDL_INIT_VIDEO = $00000020;
  SDL_WINDOW_RESIZABLE = $00000020;

  function SDL_Init(flags: integer): integer; cdecl; external libSDL3;
  function SDL_CreateWindow(title: pchar; w, h: integer; flags: integer): PSDL_Window; cdecl; external libSDL3;
  function SDL_DestroyWindow(window: PSDL_Window): Pointer; cdecl; external libSDL3;
  procedure SDL_Delay(ms: integer); cdecl; external libSDL3;

var
  window: PSDL_Window;

begin
  SDL_Init(SDL_INIT_VIDEO);

  window := SDL_CreateWindow('SDL3 Window', 320, 200, SDL_WINDOW_RESIZABLE);
  SDL_Delay(3000);
  SDL_DestroyWindow(window);
end.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

TSchnuckenbock
Beiträge: 118
Registriert: Do 20. Jul 2017, 23:47
OS, Lazarus, FPC: Win7 und Win10
CPU-Target: xxBit
Wohnort: Südheide (Schnuckenland)

Re: {$IFDEF Windows} und Delphi6

Beitrag von TSchnuckenbock »

Kennste schon

https://docwiki.embarcadero.com/RADStud ... n_(Delphi)

Wenn du ein Beispiel-Projekt für Delphi hast, dann kann ich dir das auch mal auf einem recht aktuellen Delphi ausprobieren.

Mathias
Beiträge: 6899
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: {$IFDEF Windows} und Delphi6

Beitrag von Mathias »

Wenn du ein Beispiel-Projekt für Delphi hast, dann kann ich dir das auch mal auf einem recht aktuellen Delphi ausprobieren.
Es geht um irgendein Example von meiner Bindung. Zum schauen, ob diese Bindung auch mit Delphi läuft.
Eigentlich würde das vorherige Beispiel reichen, wen da die Unit SDL3 einbindet und die lokalen Bindung entfernt.

https://github.com/sechshelme/Lazarus-S ... d-Examples
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten