Einzelnen Beitrag anzeigen

Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#10

AW: Falscher Product Type in OSVersionInfoEx

  Alt 11. Dez 2012, 15:25
Ich hab's natürlich aufgrund deines Hinweises der Vollständigkeit halber VORHER noch mal ausprobiert. Weil man sich im Lauf der Jahre daran gewöhnt hat, dass ein BOOL mit einem Boolean "kompatibel" ist. "0000" ist ja auch das selbe wie "00" oder "0"...es wird einfach nicht mehr wie "true", egal wieviele Nullen man ran hängt
Ist das so?

$100 ist als Byte in der Tat identisch mit $0, weil alles oberhalb von 8bit abgeschnitten wird beim Typecast. Als BOOL (also 32bit-Wert) hingegen nicht. Daß eine 32bittige 0 einer 8bittigen 0 entspricht ist mir auch klar. Das war aber hier nicht die Frage, bzw. das Problem. Ich bin ja hier nicht so modern ausgestattet. Aber Delphi 2009 habe ich auch. Also hab ich es mal getestet. Entwarnung. Delphi hat natürlich mal wieder den Weg des geringsten Widerstands gewählt und offenbar Compiler-Magic dafür engagiert damit Delphianer solche Dummheiten nicht machen. Was vermutlich dann bei allen die korrektes Verhalten erwarten - mal wieder - zu Überraschungen führt. Aber egal, bin ja kaum noch auf Delphi unterwegs. Habe es übrigens hiermit getestet:

Delphi-Quellcode:
program booltest;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  Windows;

function DeinApiAufruf(): LongBool;
begin
  Result := LongBool($100);
end;

function DeinDelphiWrapper(): Boolean;
begin
  Result := DeinApiAufruf();
end;

begin
  Write('Sagt: ');
  if DeinDelphiWrapper() then
    Writeln('True')
  else
    Writeln('False');
end.
Übrigens bist du auf das Lizenzproblem noch nichtmal eingegangen. Danke (oder wegen) Urheberrecht kann sich eben nicht mal jeder deinen Code krallen, es sei denn du machst ihn unter einer entsprechenden Lizenz verfügbar.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat