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

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
FrankV
Messages : 3
Inscription : ven. 06/août/2021 16:08

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

Message 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
Avatar de l’utilisateur
case
Messages : 1546
Inscription : lun. 10/sept./2007 11:13

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

Message 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)

ImageImage
FrankV
Messages : 3
Inscription : ven. 06/août/2021 16:08

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

Message 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().
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

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

Message par G-Rom »

Bonjour, la variable n'est pas globale , d'où l'erreur.
Avatar de l’utilisateur
case
Messages : 1546
Inscription : lun. 10/sept./2007 11:13

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

Message par case »

oups :)
ImageImage
FrankV
Messages : 3
Inscription : ven. 06/août/2021 16:08

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

Message 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 !
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

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

Message 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()
Répondre