Paramètres de procedure

Sujets variés concernant le développement en PureBasic
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Paramètres de procedure

Message 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 ?
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message 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

Image
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Merci Flype pour ta solution
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

alors ca marche comme çà denis ?
Image
Répondre