Donner pointeur en paramètre de procedure

Programmation d'applications complexes
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Donner pointeur en paramètre de procedure

Message par Le Soldat Inconnu »

Salut,

je complètement perdu avec mes pointeurs

je suis sur un truc tordu et je sais plus trop comment m'en sortir

je dois envoyer un pointeur mémoire en paramètre de procédure.
Et ce pointeur est mis à jour par la procédure. Sauf que je n'ai pas la nouvelle valeur du pointeur de retournée.

Code : Tout sélectionner

#LOAD_LIBRARY_AS_DATAFILE = 2

Procedure GetIconIndexList_Enumerate(hLibrary, lpszType, lpszName,  *Memory)
  Protected Result.l
  Debug "Enumeration :"
  Debug lpszName
  *Memory = ReAllocateMemory(*Memory, MemorySize(*Memory) + 4)
  Debug *Memory
  If *Memory
    PokeL(*Memory + MemorySize(*Memory) - 4, lpszName)
    Result = #True
  Else
    Result = #False
  EndIf 
  ProcedureReturn Result
EndProcedure
ProcedureDLL.l GetIconIndexList(IconFile.s)
  Protected hLibrary, Memory.l
  hLibrary = LoadLibraryEx_(IconFile, #NULL, #LOAD_LIBRARY_AS_DATAFILE)
  If hLibrary <> #NULL
    *Memory = AllocateMemory(4)
    If *Memory
      Debug "Mémoire origine"
      Debug *Memory
      EnumResourceNames_(hLibrary, #RT_GROUP_ICON, @GetIconIndexList_Enumerate(), *Memory)
      Debug "Mémoire au final"
      Debug *Memory
    EndIf
    FreeLibrary_(hLibrary)
  EndIf
  ProcedureReturn *Memory
EndProcedure

*Pointeur = GetIconIndexList("mydocs.dll")
Debug "Mémoire reçue"
Debug *Pointeur
Index = 0
While PeekL(*Pointeur + Index) > 0
  Debug PeekL(*Pointeur + Index)
  Index + 1
Wend
Merci aux spécialistes qui vont pointer le bout de leur nez
Dernière modification par Le Soldat Inconnu le dim. 17/mai/2009 22:46, modifié 1 fois.
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

au lieu de

Code : Tout sélectionner

ProcedureReturn *Memory
c'est pas plutot

Code : Tout sélectionner

ProcedureReturn @Memory
ou peut etre

Code : Tout sélectionner

ProcedureReturn @*Memory
qu'il faudrai faire ?? (je dit ça vraiment a tout hasard ) 8O
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

ouf, ben j'ai finis par trouvé. Foutu bazar, les pointeurs, c'est un belle gymnastique

Code : Tout sélectionner

#LOAD_LIBRARY_AS_DATAFILE = 2

Procedure GetIconIndexList_Enumerate(hLibrary, lpszType, lpszName,  *Memory.Long)
  Protected Result.l
  Debug "Enumeration :"
  Debug lpszName
  *Memory\l = ReAllocateMemory(*Memory\l, MemorySize(*Memory\l) + 4)
  Debug MemorySize(*Memory\l)
  Debug *Memory\l
  If *Memory\l
    PokeL(*Memory\l + MemorySize(*Memory\l) - 8, lpszName)
    Result = #True
  Else
    Result = #False
  EndIf 
  ProcedureReturn Result
EndProcedure
ProcedureDLL.l GetIconIndexList(IconFile.s)
  Protected hLibrary, Memory.l
  hLibrary = LoadLibraryEx_(IconFile, #NULL, #LOAD_LIBRARY_AS_DATAFILE)
  If hLibrary <> #NULL
    *Memory = AllocateMemory(4)
    If *Memory
      Debug "Mémoire origine"
      Debug *Memory
      EnumResourceNames_(hLibrary, #RT_GROUP_ICON, @GetIconIndexList_Enumerate(), @*Memory)
      Debug "Mémoire au final"
      Debug *Memory
    EndIf
    FreeLibrary_(hLibrary)
  EndIf
  ProcedureReturn *Memory
EndProcedure

*Pointeur = GetIconIndexList("mydocs.dll")
Debug "Mémoire reçue"
Debug *Pointeur
Index = 0
While PeekL(*Pointeur + Index * 4) > 0
  Debug PeekL(*Pointeur + Index * 4)
  Index + 1
Wend
FreeMemory(*Pointeur)
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Message par flaith »

:D Pas mal, ca va me servir, je butais sur un passage de pointeur justement

Sinon dans ta procédure GetIconIndexList(), le protected Memory.l n'est pas utilisé ou alors il faut mettre *Memory.l
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

bien vu, merci
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Répondre