Page 1 sur 1

Import n'accepte pas une variable comme parametre

Publié : jeu. 01/août/2013 15:19
par falsam
Suite à ce poste Je suis en train d'essayer de rendre un wrapper MySql crossplaform.

La fonction import utilisé dans mon wrapper mysql actuel fonctionne bien sous Windows sous cette forme..

Code : Tout sélectionner

;Import de quelques fonctions de la bibliothéque MySql
Import "libmysql.lib"
EndImport
J'ai juste ajouté les lignes ci-dessus par

Code : Tout sélectionner

Global MysqlDllFilename.s

CompilerSelect #PB_Compiler_OS
  CompilerCase #PB_OS_Windows
    MysqlDllFilename = "libmysql.dll"
  CompilerCase #PB_OS_Linux
    MysqlDllFilename = "libmysqlclient.so"
  CompilerCase #PB_OS_MacOS
    MysqlDllFilename = "libmysqlclient.so"
  CompilerCase #PB_OS_AmigaOS
    MysqlDllFilename = "mysqlclient.library"
CompilerEndSelect

;Import de quelques fonctions de la bibliothéque MySql
Import MysqlDllFilename
EndImport
Mais j'obtiens l'erreur suivant lors de la compilation
Seule des chaines de caractères constantes sont valides après un 'Import or ImportC'

Re: Import n'accepte pas une variable comme parametre

Publié : jeu. 01/août/2013 15:31
par Backup
ben fait :

Code : Tout sélectionner

CompilerSelect #PB_Compiler_OS
  CompilerCase #PB_OS_Windows
    Import "libmysql.dll"
  CompilerCase #PB_OS_Linux
    Import "libmysqlclient.so"
  CompilerCase #PB_OS_MacOS
   Import "libmysqlclient.so"
  CompilerCase #PB_OS_AmigaOS
  Import "mysqlclient.library"
CompilerEndSelect

 

Re: Import n'accepte pas une variable comme parametre

Publié : jeu. 01/août/2013 15:34
par falsam
Merci Dobro. je vais procéder de cette manière mais je trouve ça étonnant.

Re: Import n'accepte pas une variable comme parametre

Publié : jeu. 01/août/2013 15:38
par Backup
pas tant que ça , Purebasic apparemment ne "pre-process" pas
il n'analyse pas le code avant compilation
donc, il lui faut des "literal" qu'il transforme a la volé ...

s'il y avait plusieurs Pass a la compilation, ce genre de truc serait possible ...
puisqu'une pass remplacerai les Variables par leur equivalents ...

je pense que Fred sera bien obligé a un moment ou un autre de faire de la compilation multipass ... :)
(mais peut etre le fait t'il deja ?)

Re: Import n'accepte pas une variable comme parametre

Publié : jeu. 01/août/2013 15:56
par G-Rom
le compilo ne fait pas qu'une passe.
Import/ImportC est une commande du précompilateur, le string n'étant pas connu à la précompilation , car la précompilation est une étape avant la compilation.
Un compilateur comme gcc/g++/mingw sortirais le même genre d'erreur.
Un compilateur se divise en 2 grandes partie , la partie avant , et la partie arrière, la partie avant passe à la moulinette le code source et sans rentré dans les détails : précompilation & transformation en code intermédiaire, ensuite la partie arrière transforme le code intermediaire en code exploitable par la cible de compilation ( win32/64, linux , mac , etc...)

Re: Import n'accepte pas une variable comme parametre

Publié : jeu. 01/août/2013 15:57
par falsam
Merci pour ces précisions G-Rom :)

Re: Import n'accepte pas une variable comme parametre

Publié : jeu. 01/août/2013 17:24
par Fred
La valeur d'une variable n'est connue qu'a l'execution, le compilateur ne resout pas ce genre de chose à la compilation. Pourquoi ne pas simplement utiliser une constante ?

Code : Tout sélectionner

CompilerSelect #PB_Compiler_OS
  CompilerCase #PB_OS_Windows
    #MysqlDllFilename = "libmysql.dll"
  CompilerCase #PB_OS_Linux
    #MysqlDllFilename = "libmysqlclient.so"
  CompilerCase #PB_OS_MacOS
    #MysqlDllFilename = "libmysqlclient.so"
  CompilerCase #PB_OS_AmigaOS
    #MysqlDllFilename = "mysqlclient.library"
CompilerEndSelect

;Import de quelques fonctions de la bibliothéque MySql
Import #MysqlDllFilename
EndImport

Re: Import n'accepte pas une variable comme parametre

Publié : jeu. 01/août/2013 17:29
par falsam
Fred a écrit :La valeur d'une variable n'est connue qu'a l'execution, le compilateur ne resout pas ce genre de chose à la compilation. Pourquoi ne pas simplement utiliser une constante ?
Pourquoi pas d'autant plus que cette solution est plutot élégante. Merci Fred.