LinkedList dans TailBite : Marche pas

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

LinkedList dans TailBite : Marche pas

Message par Chris »

Je suis en train d'essayer de faire une lib avec TailBite, et j'ai une LinkedList dedans.
Le problème, c'est que cette liste n'est pas visible depuis le programme, et que ça m'affiche une erreur.
Pourtant, les LinkedList sont bien Globales, si je ne me trompes pas! :?

J'ai essayé de la mettre en dehors des procédures, dans la première, dans une procédre à part, dans une procédure _Init, j'ai toujours le même problème, j'ai ce message :

Code : Tout sélectionner

---------------------------
jaPBe - Erreur du compilateur !
---------------------------
Line 38: Menu() is not a function, an array, or a linked list
---------------------------
OK   
---------------------------
Pour les procedures Init, j'ai mis ça:

Code : Tout sélectionner

ProcedureDLL TestLang_Init()
  NewList Menu.s()
EndProcedure

ProcedureDLL TestLang_End()
  ClearList(Menu())
EndProcedure
Ce que je voudrais faire, c'est une lib qui permette de créer des menus "à la volée", comme dans mon dernier exemple, pour fair des programmes multi-langue.

Si quelqu'un pouvait me dire comment créer une LinkedList dans une lib pour qu'elle soit utilisable dans le programme, ça m'arrangerait bien!

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

Message par Anonyme2 »

Salut Chris,


Effectivement, les listes chainées sont Globales mais dans le cas de librairies, il faut comprendre que c'est quelque chose d'hermétique qui a bien des variables globales mais qui ne sont connues que de la librairie elle-même. On peut y avoir accès en assembleur dans le code PB qui utilise la librairie, c'est ce que je fais lorsque je met au point une librairie lors des essais 'réels' pour vérifier l'état des valeurs dans la liste chainée.

Mais sinon, ça ne marchera pas à moins que quelque chose m'échappe :roll:
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Je pense à un truc :idea:

Et si, par exemple, je fais une LinkedList avec une structure dans la librairie.

Je dois pouvoir acceder à cette structure depuis l'extérieur, et donc, l'associer à une autre LinkedList

Je me trompes??

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

Message par Anonyme2 »

T'as pas un pt'it exemple, mais je ne crois pas car les variables déclarés dans la librairies en PB ne portent plus du tout le même nom avec le fichier assembleur générée, raison pourlaquelle ont peut y avoir accès en assembleur avec leur nouvelle dénomination sachant que liste chainée est gérée par PB avec 2 variables globales de type long qui sont totalement inconnues de l'utilisateur PB.
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Je vais essayer de faire un exemple, et je poste dès que c'est fait

Chris :)
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Bon, j'ai trouvé une astuce qui a l'air de fonctionner, mais pas avec une LinkedList. :(

Je fais une structure, avec un nombre maxi de valeurs par paramètres.

Voila le code, ce sera plus simple.

Code de la lib:

Code : Tout sélectionner

Structure MONTEST
  NbEntrees.b
  Octet.b[100]
  Mot.w[100]
  Long.l[100]
  Chaine.s[100]
EndStructure
Global Test.MONTEST

ProcedureDLL MaProc()
  For i = 0 To 10
    Test\NbEntrees = i
    Test\Octet[i] = i
    Test\Mot[i] = 256 + i
    Test\Long[i] = i * 32768
    Test\Chaine[i] = Chr(i + 65)
  Next
  ProcedureReturn @Test
EndProcedure
Et voilà le code pour récupérer les valeurs de la structure dans le programme:

Code : Tout sélectionner

Structure MONTEST
  NbEntrees.b
  Octet.b[100]
  Mot.w[100]
  Long.l[100]
  Chaine.s[100]
EndStructure

*Retour.MONTEST = MaProc()

Debug *Retour\NbEntrees

For i = 0 To *Retour\NbEntrees
  Debug *Retour\Octet[i]
  Debug *Retour\Mot[i]
  Debug *Retour\Long[i]
  Debug *Retour\Chaine[i]
  Debug "==================="
Next
Bon, c'est pas vraiment ce que je voulais, mais, comme dit le proverbe, "Faute de grive, on mange des merles"

Chris )
Répondre