Page 1 sur 1

Paramètres de procedure

Publié : jeu. 11/janv./2007 19:47
par Anonyme2
Si on fait une librairie en asm par exemple, on peut demander au compilateur de ne pas tester le type du paramètre avec la valeur Any (dans le fichier descripteur)

Je n'ai pas trouvé une chose équivalente en code PB.

Est-ce que c'est possible ?

Mon vrai problème se situe par exemple avec une fonction GDI+ qui a un paramètre qui est une chaine unicode mais ce paramètre peut être mis à nul (au lieu de "")

avec les import, ca ressemble à ça

Code : Tout sélectionner

FonctionGDIplus(referenceHdc.l, type.l, *frameRect.RectF, description.p-unicode)
j'aimerais bien dire au compilateur que mon paramètre est soit une chaine unicode soit une valeur et ici une valeur nulle (et ce n'est pas un pointeur...)

Vous avez des idées ?

Publié : jeu. 11/janv./2007 23:54
par Flype
Salut Denis,

je vois très bien ce que tu veux dire.

j'ai aussi rencontré plusieurs fois ce probleme qui est précisément si j'ai bien compris :

certaines fonctions win32 attendent un 0 (Null) si la chaine est vide.
ou un pointeur sur une chaine (Non Null) si elle n'est pas vide.

or en PB, si on transmet une chaine vide ( "" ), on ne transmet pas 0 mais bien un pointeur comme le prouve ce petit ex :

Code : Tout sélectionner

; chaine vide déjà allouée

a$ = ""

Debug @a$

; ou meme comme çà :

Debug @""
Or avec PB3.94 on pouvait transmettre un 0 (numeric) meme si l'argument d'une fonction était déclarée comme une chaine (string).
PB4 est plus strict de ce coté là. Ce qui a bien sûr ses bons cotés mais aussi son mauvais coté.

La seule solution que j'ai trouvé ressemble à çà :

Code : Tout sélectionner

Prototype.l FonctionGDIplusByPtr(referenceHdc.l, type.l, *frameRect.RectF, *description.p-unicode) 
Prototype.l FonctionGDIplusByStr(referenceHdc.l, type.l, *frameRect.RectF, description.p-unicode) 

Procedure.l FonctionGDIplus(referenceHdc.l, type.l, *frameRect.RectF, description.s) 
  If description 
    ProcedureReturn FonctionGDIplusByStr(referenceHdc, type, *frameRect, description) 
  Else 
    ProcedureReturn FonctionGDIplusByPtr(referenceHdc, type, *frameRect, #Null) 
  EndIf 
EndProcedure


Publié : ven. 12/janv./2007 6:50
par Anonyme2
Merci Flype pour ta solution

Publié : ven. 12/janv./2007 14:22
par Flype
alors ca marche comme çà denis ?