Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Compilerdirective aus C++ in Delphi, wie? (https://www.delphipraxis.net/160590-compilerdirective-aus-c-delphi-wie.html)

Alter Mann 21. Mai 2011 10:38

Compilerdirective aus C++ in Delphi, wie?
 
Hallo, der Titel sagt schon alles:wink:

Wie kann ich diese C++ Direktive in Delphi umsetzen?
Code:
#if (_WIN32_WINNT >= 0x0501)
Ein Versuch:
Delphi-Quellcode:
var
  _WIN32_WINNT : WORD = 0;

implementation

uses
  SysUtils;

procedure InitUnit;
var
  OSVersionInfo: TOSVersionInfo;
begin
  OSVersionInfo.dwOSVersionInfoSize := SizeOf(OSVersionInfo);
  if GetVersionEx(OSVersionInfo) then
   _WIN32_WINNT := OSVersionInfo.dwPlatformId;
end;

initialization
  InitUnit;
scheitert hier
Delphi-Quellcode:
{IF (_WIN32_WINNT >= $0501)}
da eine Konstante erwartet wird.

Was nun?

himitsu 21. Mai 2011 10:56

AW: Compilerdirective aus C++ in Delphi, wie?
 
Mit Quellcode garnicht, daß _WIN32_WINNT müsste dafür eine Konstante sein, denn Compilerdirektiven werden vom Compiler ausgewertet.

Du kannst das nicht direkt übersetzen.
Due mußt diese Konstante selber setzen, bzw. laß diese Abfrage einfach weg. (kommt aber darauf an, was du willst)

Du müßtest diese Konstante selber setzen und entscheidest damit für welche Windows-Versionen dein Programm kompiliert wird.

Ider dz nutzt ein "normales" if und entscheidest dann zur Laufzeit, welcher Code genommen wird ... jenachdem, wo das Programm gerade läuft.

Alter Mann 21. Mai 2011 11:11

AW: Compilerdirective aus C++ in Delphi, wie?
 
Danke, ich habe es befürchtet.

Schönes WE.

hathor 28. Sep 2013 12:01

AW: Compilerdirective aus C++ in Delphi, wie?
 
Zum Beispiel:

Delphi-Quellcode:
type _WIN32_WINNT = $0400..$0602;

sx2008 28. Sep 2013 13:24

AW: Compilerdirective aus C++ in Delphi, wie?
 
Sowieso ist es besser zur Laufzeit abzufragen ob bestimmte API-Funktionen die man benützen möchte vorhanden sind oder nicht.
(mit LoadLibrary() und GetProcAdress())
Wenn die API-Funktionen nicht vorhanden sind reduziert sich der Funktionsumfang der Anwendung; es läuft aber trotzdem auch auf älteren Windows Versionen.
Manchmal werden ältere Windows Versionen per Service Pack von Microsoft nachgerüstet (kommt leider viel zu selten vor).
Würde man nur die Windows Version abfragen und aufgrund dessen entscheiden ob man die gewünschte API benützen kann oder nicht würde man hier falsch reagieren.

Bernhard Geyer 28. Sep 2013 13:28

AW: Compilerdirective aus C++ in Delphi, wie?
 
Zitat:

Zitat von sx2008 (Beitrag 1230190)
Sowieso ist es besser zur Laufzeit abzufragen ob bestimmte API-Funktionen die man benützen möchte vorhanden sind oder nicht.
(mit LoadLibrary() und GetProcAdress())

Mit neueren Delphi-Versionen würde ich auf diesen umständlichen Weg nicht mehr gehen und Delay load(http://www.drbob42.com/examines/examinC1.htm) verwenden.

Zitat:

Zitat von sx2008 (Beitrag 1230190)
Manchmal werden ältere Windows Versionen per Service Pack von Microsoft nachgerüstet (kommt leider viel zu selten vor).

Gabs mal - wirds nicht mehr geben.
Im Gegenteil wir werden wieder schnellere neue Windows-Versionen (Windows 8/8.1/8.2) zu Apple-Ähnlichen Preisen finden und die großen SP's wie bei W2K/SP werden (leider) aussterben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz