Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Nicht abgeschlossene bedingte Direktive (https://www.delphipraxis.net/172709-nicht-abgeschlossene-bedingte-direktive.html)

Codehunter 18. Jan 2013 13:59

Delphi-Version: 7

Nicht abgeschlossene bedingte Direktive
 
Hallo!

Mein D7-Compiler gibt mir grad ein bisschen Rätsel auf. Hier erstmal der Code:
Delphi-Quellcode:
function dwVMWareIsPresent: Boolean;
begin
 Result := False;
{$IFDEF CPU386}
 try
  asm
      mov  eax, 564D5868h
      mov  dx, 5658h
      mov  ecx, 0000000Ah
      xor  ebx, ebx
      in  eax, dx
      cmp  ebx, 564D5868h
      jne  @@exit
      mov  Result, True
  @@exit:
  end;
 except
  Result := False;
 end;
{$ENDIF}
end;
Beim
Delphi-Quellcode:
{$IFDEF CPU386}
wirft der Compiler die besagte Meldung als Fehler aus und hält an. Aber auch nur bei einem STRG-F9-Durchlauf. Bei einem darauf folgenden F9 compiliert er sauber durch. Wo ist da jetzt der Denkfehler? Die übliche Medizin, also erstmal alle DCUs löschen und komplett neu erzeugen lassen hilft nicht.

Grüße
Cody

MeierZwoo 18. Jan 2013 15:20

AW: Nicht abgeschlossene bedingte Direktive
 
Also ich bin der Meinung, daß, wenn diese function nicht im Hauptprogramm (dpr) steht, bei F9 = run keine Quellcode-Änderungen der Units berücksichtigt werden - also die letzte Änderung garnicht berücksichtigt wird - deshalb bei F09 = run kein Meckern.

Zum anderen wird der Fehler oberhalb der angemeckerten Stelle sein und erst beim erneuten {$IFDEF CPU386} wird gemeckert, weil oben noch nicht abgeschlossen wurde.

Codehunter 18. Jan 2013 17:26

AW: Nicht abgeschlossene bedingte Direktive
 
Zitat:

Zitat von MeierZwoo (Beitrag 1199652)
Zum anderen wird der Fehler oberhalb der angemeckerten Stelle sein und erst beim erneuten {$IFDEF CPU386} wird gemeckert, weil oben noch nicht abgeschlossen wurde.

Das muss ich morgen mal prüfen, daran hab ich nicht gedacht. Aber ich glaube, D7 kann doch verschachtelte $IFDEFs oder?

MeierZwoo 18. Jan 2013 17:45

AW: Nicht abgeschlossene bedingte Direktive
 
Ich meinte mit "oben", wenn oben schon einmal dieselbe {$IFDEF CPU386} begonnen wurde - was der Compiler meckert, wenn in einer {$IFDEF CPU386} noch eine {$IFDEF CPU386} auftaucht:

{$IFDEF CPU386}
// ..
{$IFDEF CPU386}
// ..
{$ENDIF}
// ..
{$ENDIF}

Meckert mein D9 nicht an. Gedankenfehler meinerseits.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:15 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