Page 1 sur 1
purebasic library descriptor -> accéder au variable, labe
Publié : ven. 30/sept./2005 23:29
par Dr. Dri
Si par exemple je voudrais faire une fonction qui renvoie le numéro du fichier courrant. Comment je m'y prend ? Tout ce dont je dispose c'est du symbole
_PB_File_ObjectsNumber dans la description des bibliothèques.
Dri

Publié : ven. 30/sept./2005 23:37
par Backup
je vais peut etre dire une betise mais
puisque "Resultat = OpenFile(#Fichier, NomFichier$) "
resultat contient le numero du fichier ouver , pourquoi ne pas le sauvegarder ou bien le passer en retour de procedure ?
[redit :] ARG j'avais pas vu qu'on etait en ASM !! excuse

Publié : ven. 30/sept./2005 23:48
par Dr. Dri
bah meme en asm on peut appeler openfile... mais le probleme c'est si tu ne connais pas le fichier courant... (par exemple en multithreading) ou si tu utilises une lib qui manipule des fichiers...
Dri
Publié : sam. 01/oct./2005 10:08
par Anonyme2
Freak a posté un code il y a 2 ans ici
http://forums.purebasic.com/english/vie ... bjectsarea
_PB_File_ObjectsNumber --> c'est le nombre de fichiers
_PB_File_ObjectsArea --> c'est la zone ou est stokée le handle de chaque fichier le cas échéant qui correspond à la structure
Code : Tout sélectionner
Structure
PB_FileStructure
File ; OS File pointer (HANDLE)
EndStructure
_PB_File_Current --> comme le dit la doc c'est le handle du fichier courant
Le code de Freak compare le handle courant au handle de l'ensemble des handles de la zone _PB_File_ObjectsArea
S'il y a égalité, le compteur de boucle vaut l'id static de PB
Même si aucun fichier n'est ouvert, le nombre de fichiers n'est pas nul (chez moi 10), je suppose que Fred a alloué de la place pour au moins 10 fichiers (en fait 10 long correspondant aux 10 handles) et en réalloue seulement si l'id static est > à 9 (indices de 0 à 9) d'ou l'intérêt de commencer avec l'indice 0 et de continuer en incrémentant de 1
Pour le code de Freak, moi je rajouterai un break pour terminer plus rapidement dans la boucle for comme ceci
Code : Tout sélectionner
If *Pointer\l = Current And *Pointer\l <> 0
Result = Number
Break ; <---------- ici
EndIf
Publié : sam. 01/oct./2005 10:29
par Dr. Dri
je me suis trompé de symbole ^^ mais pour le principe je viens de comprendre grace au code de freak
il fallait utiliser le mot clé extern ^^
Dri
