Page 1 sur 1

Pointeur de fonction / Erreur: "get_env() n'est pas une fonction"

Publié : ven. 06/août/2021 16:19
par FrankV
Débutant en PureBasic mais expérimenté en C, j'essaie d'importer une fonction C via un prototype et cela échoue avec l'erreur ci-dessous:
(merci de votre aide car je ne vois pas comment franchir cet obstacle)

Module GW
; -----------------------------------------------------------------------------
; Get the memory pointer for the server reply dynamic buffer
;
; Example:
; Define reply.i = GW::getEnv(argv, GW::#REMOTE_ADDR)
; Debug PeekS(reply.i)
; -----------------------------------------------------------------------------
PrototypeC.i Tget_env(argv.i, value.l)
Define get_env.Tget_env = #Null

Procedure.i getEnv(argv.i, value.l)
If get_env = #Null ; le pointeur est NULL?
get_env = argv ; installe la fonction
EndIf
; *** ERROR: get_env() is not a function, array, list, map or macro
Protected ret.i = get_env(argv, value)
ProcedureReturn ret
EndProcedure

EndModule

Re: Pointeur de fonction / Erreur: "get_env() n'est pas une fonction"

Publié : ven. 06/août/2021 17:34
par case
get_env() n'est effectivement pas une procedure puisque la procedure est nomée getenv()

Code : Tout sélectionner

 Procedure.i getEnv(argv.i, value.l)


Re: Pointeur de fonction / Erreur: "get_env() n'est pas une fonction"

Publié : ven. 06/août/2021 17:54
par FrankV
> get_env() n'est pas une procedure puisque la procedure est nomée getenv()

Merci de votre réponse.

get_env est le pointeur de la fonction en C (voir le prototype).

GetEnv() est la fonction PureBasic qui appelle la fonction C get_env().

Re: Pointeur de fonction / Erreur: "get_env() n'est pas une fonction"

Publié : ven. 06/août/2021 18:44
par G-Rom
Bonjour, la variable n'est pas globale , d'où l'erreur.

Re: Pointeur de fonction / Erreur: "get_env() n'est pas une fonction"

Publié : ven. 06/août/2021 19:03
par case
oups :)

Re: Pointeur de fonction / Erreur: "get_env() n'est pas une fonction"

Publié : sam. 07/août/2021 6:52
par FrankV
G-Rom a écrit : ven. 06/août/2021 18:44 Bonjour, la variable n'est pas globale , d'où l'erreur.
Vous avez raison, c''etait la cause du probleme.

Je pensais (benoitement) que EnableExplicit et Declare me mettaient a l'abri
de ce genre d'erreurs... mais il n'y avait pas de "undeclared" ou "undefined".

A la place, pbcompiler donne l'erreur "get_env() n'est pas une fonction" qui est
plutot etrange.

Merci en tout cas pour votre aide precieuse !

Re: Pointeur de fonction / Erreur: "get_env() n'est pas une fonction"

Publié : sam. 07/août/2021 10:17
par G-Rom

Code : Tout sélectionner

Merci en tout cas pour votre aide precieuse !
De rien, juste pour information au cas ou vous ne le saviez pas, purebasic propose en natif la récupération des variables d'environnements.

Code : Tout sélectionner

Path$ = GetEnvironmentVariable("PATH")
For i = 1 To CountString(Path$,";") ; StringField() index commence à 1
  Debug StringField(Path$,i,";")  
Next
Ainsi que votre prototype peu avoir le même nom que le pointeur de fonction :

Code : Tout sélectionner

Procedure Foo()
  Debug "Foo proc call"  
EndProcedure
Prototype FooProto()
Global FooProto.FooProto = @Foo()
FooProto()