Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

constantes de compilation conditionnelle

4 réponses
Avatar
Alain CROS
Bonjour.

J'utilise une API qui n'est pas définie dans la même dll en fonction de la version de Windows.
J'aurais préféré utiliser une compilation conditionnelle plutôt qu'une gestion d'erreur.
Existe t'il une constante de compilation prédéfinie utilisable dans ce cas ?
Comment connaître toutes les constantes de compilation prédéfinies ?

Merci.

Alain CROS.

4 réponses

Avatar
Michel Pierron
Bonjour Alain;
Peut être tout simplement, dans la partie Déclarations:

#If WinVersion = xxx Then
Private Declare Function applicable à ce cas.
#Else
Private Declare Function applicable aux autres cas.
#End If

Dans laquelle bien sur, WinVersion renvoie le paramètre nécessaire.
Exemple simple:
#If UNICODE Then
Private Declare Function CharNext Lib "user32" Alias "CharNextW" (ByVal lpsz As
Any) As Long
#Else
Private Declare Function CharNext Lib "user32" Alias "CharNextA" (ByVal lpsz As
Any) As Long
#End If

MP

"Alain CROS" a écrit dans le message de
news:
Bonjour.

J'utilise une API qui n'est pas définie dans la même dll en fonction de la
version de Windows.

J'aurais préféré utiliser une compilation conditionnelle plutôt qu'une gestion
d'erreur.

Existe t'il une constante de compilation prédéfinie utilisable dans ce cas ?
Comment connaître toutes les constantes de compilation prédéfinies ?

Merci.

Alain CROS.




Avatar
Alain CROS
Bonjour.

Merci pour ta réponse.
J' ai essayé de faire quelque chose du genre
If Application.OperatingSystem = window98 then
#Const WinVersion = 1
end if
Puis #If WinVersion = 1 ... comme suggéré mais ça ne fonctionne pas.
C'est toujours la même qui est déclarée.
Je pense qu'il doit exister une constante de compilation prédéfinie genre "W2000".
Mes recherches ne m'ont rapportées que les constantes suivantes :
VBA6, UNICODE, WIN32, MAC, WIN16.
Si quelqu'un connaît un site traitant de la compilation conditionnelle sous vba, qu'il n'hésite pas a en communiquer l'adresse.
Dans un premier temps, je resterais avec ma gestion d'erreur.

Alain CROS.

"Michel Pierron" a écrit dans le message de news:
Bonjour Alain;
Peut être tout simplement, dans la partie Déclarations:

#If WinVersion = xxx Then
Private Declare Function applicable à ce cas.
#Else
Private Declare Function applicable aux autres cas.
#End If

Dans laquelle bien sur, WinVersion renvoie le paramètre nécessaire.
Exemple simple:
#If UNICODE Then
Private Declare Function CharNext Lib "user32" Alias "CharNextW" (ByVal lpsz As
Any) As Long
#Else
Private Declare Function CharNext Lib "user32" Alias "CharNextA" (ByVal lpsz As
Any) As Long
#End If

MP

"Alain CROS" a écrit dans le message de
news:
Bonjour.

J'utilise une API qui n'est pas définie dans la même dll en fonction de la
version de Windows.

J'aurais préféré utiliser une compilation conditionnelle plutôt qu'une gestion
d'erreur.

Existe t'il une constante de compilation prédéfinie utilisable dans ce cas ?
Comment connaître toutes les constantes de compilation prédéfinies ?

Merci.

Alain CROS.








Avatar
Frédéric Sigonneau
Bonjour Alain,

Je n'ai pas de tuyau particulier sur les directives de compilation
conditionnelle. Je pense qu'elles sont en petit nombre et, pour ce qui est du
système d'exploitation, qu'elles ne font pas de distinction plus "fine" que
WIN16 et WIN32.
Ceci dit, sans gestion d'erreur, tu peux aussi déclarer les deux API différentes
et, dans ton code, tester le système pour utiliser l'une ou l'autre. Si une des
fonctions a été conçue pour l'architecture NT et l'autre pour les versions 32
bits de Windows/Dos, le test demande assez peu de code..

FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !


Bonjour.

Merci pour ta réponse.
J' ai essayé de faire quelque chose du genre
If Application.OperatingSystem = window98 then
#Const WinVersion = 1
end if
Puis #If WinVersion = 1 ... comme suggéré mais ça ne fonctionne pas.
C'est toujours la même qui est déclarée.
Je pense qu'il doit exister une constante de compilation prédéfinie genre "W2000".
Mes recherches ne m'ont rapportées que les constantes suivantes :
VBA6, UNICODE, WIN32, MAC, WIN16.
Si quelqu'un connaît un site traitant de la compilation conditionnelle sous vba, qu'il n'hésite pas a en communiquer l'adresse.
Dans un premier temps, je resterais avec ma gestion d'erreur.

Alain CROS.

"Michel Pierron" a écrit dans le message de news:
Bonjour Alain;
Peut être tout simplement, dans la partie Déclarations:

#If WinVersion = xxx Then
Private Declare Function applicable à ce cas.
#Else
Private Declare Function applicable aux autres cas.
#End If

Dans laquelle bien sur, WinVersion renvoie le paramètre nécessaire.
Exemple simple:
#If UNICODE Then
Private Declare Function CharNext Lib "user32" Alias "CharNextW" (ByVal lpsz As
Any) As Long
#Else
Private Declare Function CharNext Lib "user32" Alias "CharNextA" (ByVal lpsz As
Any) As Long
#End If

MP

"Alain CROS" a écrit dans le message de
news:
Bonjour.

J'utilise une API qui n'est pas définie dans la même dll en fonction de la
version de Windows.

J'aurais préféré utiliser une compilation conditionnelle plutôt qu'une gestion
d'erreur.

Existe t'il une constante de compilation prédéfinie utilisable dans ce cas ?
Comment connaître toutes les constantes de compilation prédéfinies ?

Merci.

Alain CROS.










Avatar
Alain CROS
Bonjour.

Ok Merci.
C'est un peu plus long comme ça mais faisable aussi.

Alain CROS.

"Frédéric Sigonneau" a écrit dans le message de news:
Bonjour Alain,

Je n'ai pas de tuyau particulier sur les directives de compilation
conditionnelle. Je pense qu'elles sont en petit nombre et, pour ce qui est du
système d'exploitation, qu'elles ne font pas de distinction plus "fine" que
WIN16 et WIN32.
Ceci dit, sans gestion d'erreur, tu peux aussi déclarer les deux API différentes
et, dans ton code, tester le système pour utiliser l'une ou l'autre. Si une des
fonctions a été conçue pour l'architecture NT et l'autre pour les versions 32
bits de Windows/Dos, le test demande assez peu de code..

FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !