Version in Include ?

Eigentlich ist mir die Frage peinlich, aber es kann sonst niemand helfen ... :)

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Version in Include ?

Beitrag von AUGE_OHR »

hi,

in WINUSER.H gibt es z.b. so was

Code: Alles auswählen

#if(WINVER >= 0x0500)
um Konstaten z.b. für Vista/Win7 zu definieren.

wie macht man das mit Xbase++ und *.CH Dateien ?
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Version in Include ?

Beitrag von brandelh »

Hi Jimmy,

schau dir #define und #if oder #ifdev an ;-)

Code: Alles auswählen

#define GRENZWERT  100
...
#if AktuellerWert > GRENZWERT
     ...
#endif 
Numerische Vergleichsparameter funktionieren auf jeden Fall, eigentlich sollten auch Strings funktionieren, aber da gab es einen PDR.
Gruß
Hubert
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Version in Include ?

Beitrag von Wolfgang Ciriack »

brandelh hat geschrieben:
oder #ifdev
Du arbeitest zuviel mit Windev :D
Viele Grüße
Wolfgang
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Version in Include ?

Beitrag von brandelh »

=D>
ich meinte natürlich ... #ifdef

#if und #ifdef erzeugen dabei unterschiedliche EXE je nach Vergleich, wenn das nicht gewünscht wird kann man natürlich noch mit IF etc. die defines abfragen.
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Version in Include ?

Beitrag von brandelh »

Wobei wenn ich die Frage noch mal lese ...

Konstanten für das OS() werden normalerweise ja nicht beim Compilieren bestimmt, somit würde ich dort eher eine do case mit
OS(OS_VERSION) ... oder os(OS_FAMILY) nutzen. Meine EXE will ich ja nicht für jedes Windows erstellen müssen ;-)
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Version in Include ?

Beitrag von AUGE_OHR »

brandelh hat geschrieben:Wobei wenn ich die Frage noch mal lese ...

Konstanten für das OS() werden normalerweise ja nicht beim Compilieren bestimmt, somit würde ich dort eher eine do case mit OS(OS_VERSION) ... oder os(OS_FAMILY) nutzen.
ich meine ja die *.CH Include Dateien ... da kann ich ja kein DO CASE oder OS() machen.

ich frage ja deshalb weil es in der WINUSER.H so was gibt

Code: Alles auswählen

#if(WINVER >= 0x0500)
es gibt aber kein WINVER als Environment ... höchstens "VER"

... ist WINVER, ähnlich wie _XPPVER_, vielleicht eine "Vordefinierte Konstanten des Compilers" ?
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Version in Include ?

Beitrag von brandelh »

Hi,

warum sollte man OS() und DO CASE nicht in einer .CH Datei machen können ?
Es kann zwar sein, dass dies die Zeilenzähler beim debuggen durcheinander bringt, aber erlaubt ist das allemal.

WINVER dürfte eine FUNKTION des Compilers oder der API sein, denn diese muss ja die aktuelle Windowsversion ermitteln.

Pablo weiß sowas ;-)
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Version in Include ?

Beitrag von brandelh »

... und in PowerBasic ist die API hinterlegt, mal sehen was die macht ...

in WinUser.INC (entspricht .H) steht dies ...

Code: Alles auswählen

#INCLUDE "SdkDdkVer.inc"
#INCLUDE "WinDef.inc"

#IF NOT %DEF(%WINVER)
%WINVER = &H0500      ' version 5.0
#ENDIF ' NOT %WINVER
hier wird nachgesehen ob die KONSTANTE %WINVER schon definiert ist, wenn nicht wird sie auf &H0500 gesetzt ... das Win2000 oder ?
woher könnte sie vorher definiert worden sein ... es gibt eine WinVer.H im Internet, aber hier stehen andere #INCLUDE Dateien.

Sehen wir uns in WinDef.inc um ...

Code: Alles auswählen

#IF NOT %DEF(%WINVER)
%WINVER = &H0500
#ENDIF ' WINVER
wir müssen nochmals eine höher: SdkDdkVer.inc -> SdkDdkVer.H
hier wird zunächst definiert, welche Versionsnummer was entspricht (alles Konstanten)

Code: Alles auswählen

'
' %WIN32_WINNT version constants
'
%WIN32_WINNT_NT4                  = &H0400
%WIN32_WINNT_WIN2K                = &H0500
%WIN32_WINNT_WINXP                = &H0501
%WIN32_WINNT_WS03                 = &H0502
%WIN32_WINNT_WIN6                 = &H0600
%WIN32_WINNT_VISTA                = &H0600
%WIN32_WINNT_WS08                 = &H0600
%WIN32_WINNT_LONGHORN             = &H0600
%WIN32_WINNT_WIN7                 = &H0601
dann - etwas seltsam - kommt diese Aussage:

Code: Alles auswählen

'
' if versions aren't already defined, default to most current
'
Also beim Compilieren eines Programmes nimmt der compiler die höchste Windowsversion die es gibt zum definieren von WINVER ???

Code: Alles auswählen

#IF NOT %DEF(%WINVER)
  #IF %DEF(%WIN32_WINNT)
    ' set WINVER based on %WIN32_WINNT
    %WINVER        = %WIN32_WINNT
  #ELSE
    %WINVER        = &H0601
  #ENDIF
#ENDIF
Ich denke ich verstehe, der Entwickler selbst kann die Konstante %WIN32_WINNT setzen, wenn er möchte, dass %WINVER einen anderen als den höchten Windowsstand zurück gibt.
Warum sollte er sowas tun ?
Nun wenn das Programm auf einem Windows 98 laufen soll, dann muss man die Konstante auf den passenden Wert setzen um zu verhindern, dass Konstanten und Werte gesetzt werden, die Win98 gar nicht verarbeiten kann !
Die EXE wird also begrenzt, wie z.B. bei den CPU Möglichkeiten (Zielsystem 286, 386 etc.)
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Version in Include ?

Beitrag von AUGE_OHR »

hi,
brandelh hat geschrieben:warum sollte man OS() und DO CASE nicht in einer .CH Datei machen können ?
Es kann zwar sein, dass dies die Zeilenzähler beim debuggen durcheinander bringt, aber erlaubt ist das allemal.
ich habe noch noch nie ausprobiert ...
brandelh hat geschrieben:Ich denke ich verstehe, der Entwickler selbst kann die Konstante %WIN32_WINNT setzen, wenn er möchte, dass %WINVER einen anderen als den höchten Windowsstand zurück gibt.
Warum sollte er sowas tun ?
Nun wenn das Programm auf einem Windows 98 laufen soll, dann muss man die Konstante auf den passenden Wert setzen um zu verhindern, dass Konstanten und Werte gesetzt werden, die Win98 gar nicht verarbeiten kann !
Die EXE wird also begrenzt, wie z.B. bei den CPU Möglichkeiten (Zielsystem 286, 386 etc.)
AHA ja ... das klingt "logisch" =D>
gruss by OHR
Jimmy
Antworten