Page 4 sur 5

Re: minilib

Publié : dim. 08/oct./2017 15:46
par falsam
Le liens étant perdu dans les méandres de ce post, ça fait pas de mal de le remettre ici
https://www.dropbox.com/s/b55c4gox2srss ... b.zip?dl=1

Re: minilib

Publié : dim. 08/oct./2017 15:58
par falsam
Aie! tu as un souci avec les procédures sans paramètre.

Tu génères l'obligation d'un parametre dans ton fichier desc.

Si j'ai la procédure ProcedureDLL.s GetCPUName(), tu génères
GetCPUName, Long, ())
au lieu de
GetCPUName, ())
D'ailleurs je viens de voir que tu as aussi un souci de parenthèse. Le résultat devrait être
GetCPUName, ()

Re: minilib

Publié : dim. 08/oct./2017 18:07
par zaphod_b
Merci @Falsam, d'avoir testé.
Ca plantait avec le commentaire en fin de getcpuname.

J'ai corrigé (j'espère) et mis à jour le premier post avec la version 1.7.1

Re: minilib

Publié : jeu. 12/oct./2017 10:03
par zaphod_b
Version 1.7.2 dispo (source sur 1er post).

Corrige un bug sur sélection du compilateur.
Ajout du RET + 4 pour les retours de string des procedures en x86.

Re: minilib

Publié : jeu. 12/oct./2017 10:42
par Kwai chang caine
Et ben...que de route 8) depuis mon dernier test de la v1.4 :oops:

- Génial !!! cette fois on peut encore moins se tromper dans les étapes...le bouton change à chacune d'elle
- Tu l'as fait multilangue
- Tu as apparemment fait une procédure Init() et Free() à la maniere des DLL "AttachProcess() et DetachProcess()"

Bon j'ai noté une coquillette, ton fichier langue est plus long que le tablo "lang" du coups plantage, je l'ai mis à 50 et ça roule "ma poule" :wink:
Moi ce que je fais quand y'a pas trop de données et pas trop besoin de rapidité, je redim à chaque lecture (Je sais....c'est po bien !!! :oops:), mais y'a jamais ce probléme, comme le fichier langue peut être changé de l’extérieur. ou alors dimensionner à 10000 et redim à la fin..car le pelo qui va te mettre 10000 mots dans ton fichier il est pas encore né :lol:

Autrement tout a marché, l'init, le free et le messageRequester....top coooool !!! 8)
Encore merci pour tout ce boulot et surtout pour le partage :wink:

Re: minilib

Publié : jeu. 12/oct./2017 20:22
par falsam
Ajouter un + 4 pour obtenir un RET + 4 n'est pas forcément la bonne solution, c'est en autres pour ça que je ne le fais pas dans MLF pour le moment.

Voila un code ou ça ne se passe pas bien

Code : Tout sélectionner

ProcedureDLL.s PassString(Buffer.s)
  ProcedureReturn Buffer + " extend"
EndProcedure
le résultat de l'ASM compilé par MiniLib est
public PB_PassString
PB_PassString:
PS0=8
XOR eax,eax
PUSH eax
MOV edx,dword [esp+PS0+0]
LEA ecx,[esp+0]
CALL SYS_FastAllocateString
; procedurereturn Buffer + " extend"
MOV edx,dword [esp]
PUSH dword [_PB_StringBasePosition]
PUSH edx
CALL _SYS_CopyString@4
MOV edx,_S1
PUSH edx
CALL _SYS_CopyString@4
POP eax
ADD eax,[PB_StringBase]
JMP _EndProcedure1
; EndProcedure
_EndProcedureZero1:
MOV eax,[_PB_StringBasePosition]
ADD eax,[PB_StringBase]
MOV word [eax],0
_EndProcedure1:
PUSH dword [esp]
CALL _SYS_FreeString@4
ADD esp,4
RET + 4 4
Comme vous pouvez le voir, la dernière ligne n'est pas conforme.

Essayez aussi de passer un Array avec un retour string.

Re: minilib

Publié : ven. 13/oct./2017 10:09
par PAPIPP
Bonjour à tous

J'ai essayé de compiler le prg suivant

Code : Tout sélectionner

PROCEDUREDLL.S CONCATinv(A1.S,B1.S)
  procedurereturn B1+A1 
endprocedure  
impossible à compiler le fichier *.desc est incomplet

Pour avoir une idée de ce qu'il faut faire :
http://www.purebasic.fr/french/viewtopi ... &start=165

je pense avoir trouver quelque bug dans MLF et d'avoir la solution sur l'écrasement de certains éléments

A+

Re: minilib

Publié : ven. 13/oct./2017 14:19
par zaphod_b
J'ai mis à jour MiniLib 1.7.3

J'utilise la convention +4 qui "semble" fonctionner avec les sources proposés de Falsam et Papipp (passtring et concatinv).
Donc si RET 4 on obtient RET 4+4
Si RET 8 on obtient RET 8+4

J'ai testé le cdecl : marche pas avec concatinv(a$,b$)

Tailbite de Gnozal je crois, utilise aussi la convention +4.

J'ai abandonné l'espoir de penser qu'il ne reste pas de bug 8O :? :oops:
Restons zen...

Re: minilib

Publié : ven. 13/oct./2017 16:35
par Zorro
zaphod_b a écrit : J'ai testé le cdecl : marche pas avec concatinv(a$,b$)
et avec "stdcall" ?? (stdcall est pour windows et specialement les APIs ;) )
Tailbite de Gnozal je crois, utilise aussi la convention +4.
non Tailbite n'etait pas de Gnozal :)
mais Miguel Calderón alias : El_Choni

Re: minilib

Publié : sam. 14/oct./2017 10:47
par zaphod_b
Mis à jour la version 1.7.4 :
-prend en charge les ProcedureDLL$ aaa()
-procedureDLL = stdcall
-procedureCDLL = cdecl

Permet de compiler des libs en mode THREAD

Re: minilib

Publié : ven. 27/oct./2017 1:32
par Ollivier
Ah ! Ben t'as pas attendu !

Petite suggestion utile (ou pas).

Il y a un code ici

Quand on utilise les alarmes pour créer/gérer/supprimer des threads, on peut embarquer un débogueur assez particulier (et rendre l'honneur à un concept évoqué par PAPIPP).

Il y a une belle doc avec, dans le sujet en question, même pas besoin que je reste communiquer dessus...

Je crois que c'était en version 4.5. Me souviens plus. Après on a AttachThread/DetachThread qu'il faut substituer au programme client. Et j'avais déjà tout centralisé pour ça, donc, pas un très gros effort.

Je suppose que la principale cause de crash sur les versions récentes de compilateur, c'est justement (et heureusement) que Fred a aussi rajouté des relâchements (équivalents de Delay) dans des instructions natives et comme il sont temporisés, mes Delays explicites viennent foirer la chronométrie des Delays implicites (mais pas tous !). Il suffit de savoir commenter les bons et zoup direction la version 5.6.

Voilà, ne sachant pas où tu en es dans ton projet (je n'ai pas besoin de faire de libs), peut-être que ça peut servir...

Re: minilib

Publié : ven. 27/oct./2017 15:52
par zaphod_b
Pas tout pigé (post précédent).............

Pour les threads et les libs : sa sert pour pouvoir utiliser des fonctions d'une LIB avec l'option du compilateur THREAD.

Si une lib n'est pas thread : elle marche à condition de ne pas mettre le mode THREAD dans le compilo.

Minilib dans sa version 1.7.5 (source non mis à jour) permet de faire :
1/ des libs non thread
2/ des libs thread uniquement
3/ des libs qui fonctionnent en thread ou non (threadsafe)

Le mode AUTO permet de tout faire en 1 seule étape.
J'ai rajouté une fonction RECOMP pour recompiler un source ASM, pas vraiment utilie aux libs mais j'en avais besoin.

Je laisse la place à MLF.

Re: minilib

Publié : ven. 27/oct./2017 19:03
par kernadec
Bsr à tous
zaphod_b a écrit : Si une lib n'est pas thread : elle marche à condition de ne pas mettre le mode THREAD dans le compilo.
Voila une solution sans polémiques :mrgreen:
Cordialement

Re: minilib

Publié : sam. 28/oct./2017 13:53
par Mouillard
Merci Zaphob pour cette ligne de code dans MiniLib...

Elle me sert à remplacer un éditeur dans lequel je pouvais pas faire de copier/coller.
[codeStringGadget(#mlib_String_edit, 3, 5, 405, 190, "", #ES_MULTILINE|#WS_BORDER|#WS_VSCROLL|#WS_HSCROLL)][/code]

J'ai seulement re baptiser le gadget et ça marche impeccable.....

Copier/ coller de recette de cuisine , idée de Micoute et code de Falsam.

Bon W E.
Jean Michel

Re: minilib

Publié : sam. 28/oct./2017 15:25
par kernadec
Bjr Mouillard
En bas a gauche dans options de ta boite message (réponse) tu as le mode d' emploi du menu BBCode !
Sinon voilà
http://forums.phpbb-fr.com/faq.php?mode=bbcode
Cordialement