PureBasic

Forums PureBasic
Nous sommes le Mer 19/Juin/2013 14:55

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 65 messages ]  Aller à la page Précédente  1, 2, 3, 4, 5  Suivante
Auteur Message
 Sujet du message:
MessagePosté: Dim 16/Nov/2008 16:43 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 22/Jan/2004 14:31
Messages: 3312
En fait la ligne de la procedure Moebius_Compile_Step2() est juste, l'erreur vient des lignes suivantes

Code:
LL_DLLFunctions()\FuncName = StringField(TrCodeField, 1, " ")



remplaces :

Code:
TrCodeField = ReplaceString(TrCodeField, "proceduredll", "")
TrCodeField = ReplaceString(TrCodeField, "ProcedureDLL", "")


par
Code:
TrCodeField = ReplaceString(TrCodeField, "proceduredll", "", #PB_String_NoCase)


Le desc semble être Ok au moins pour les 2 fonctions
Code:
ASM
1
KERNEL32
LIB
0
Sample_00.chm
FunctionTest, Long (Param1.l)
Long | StdCall
FunctionTest2, Long (Param1.l)
Long | StdCall
Samples00Windows_Init
InitFunction | StdCall

_________________
Documentation GDI + 1.0 PB 4.30 beta 4 et supérieur
PureIconManager


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Dim 16/Nov/2008 17:12 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 22/Jan/2004 14:31
Messages: 3312
Encore une erreur car PB ne trouve pas le fiichier lib avec le linker.

Je crois me rappeler que le fichier .desc doit être dans le même dossier que le fichier lib et je me demande si le reste ne doit pas y être aussi (les obj et le .txt des fonctions)

_________________
Documentation GDI + 1.0 PB 4.30 beta 4 et supérieur
PureIconManager


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Dim 16/Nov/2008 17:46 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 14/Déc/2004 13:56
Messages: 2656
Localisation: France > Basse-Normandie > Prés de Caen
Je pense la même chose sous Linux :) pour l'erreur du fichier lib.

En mettant le fichier DESC dans le dossier LIB, je n'ai plus l'erreur.

_________________
Moebius : Doc FR / EN - Moebius 1.0


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Dim 16/Nov/2008 19:27 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 22/Jan/2004 14:31
Messages: 3312
J'ai modifié les chemins pour avoir dans le dossier OBJ, les fichiers obj, le fichier lib, le fichier txt, le fichier desc, maintenant ça compile et la lib est créée (mais le code asm est à revoir). Pour la modif des chemins, je n'ai pas mis les modifs, tu peux le faire dans le projet pour qu'on puisse repartir du même projet pour la suite.

Lorsqu'on aura un truc qui tourne à peu près, on compilera sous linux si on peux faire un fichier .a avec le shell de linux.

J'ai amélioré la procédure de création asm avec affichage de l'erreur de compilation

Voici les procedures modifiées, il faudra mettre dans la Todo list de changer toutes les occurences de #PB_Compiler_Home par le chemin récupéré dynamiquement.

Code:
ProcedureDLL Moebius_Compile_Step1()
     ; 1. PBCOMPILER creates the EXE (using POLINK) that we don't need, but also the ASM file (/COMMENTED)
     If CreateAsmFile(gConf_SourceDir + "Sample_00.pb")<0
          End
     EndIf
EndProcedure



ProcedureDLL Moebius_Compile_Step5()
     ; 5. LibraryMaker creates userlibrary from the LIB file
     
     ; mémorise le nom et le chemin de la libraire PB (userlibrairie)
     Protected FichierUserLibrary$ = #PB_Compiler_Home + "PureLibraries\UserLibraries\" + gProject\LibName

     RunProgram(gConf_Path_PBLIBMAKER, Chr(34) + gProject\FileDesc + Chr(34) + " /To " + Chr(34) + gConf_PureBasic_Path + "purelibraries" + #System_Separator + "userlibraries" + #System_Separator + Chr(34) + " /COMPRESSED", gConf_ProjectDir, #PB_Program_Wait | #PB_Program_Hide)
     
     Debug FileSize(FichierUserLibrary$)
     
     If FileSize(FichierUserLibrary$)>0
          MessageRequester("Infos", "La librairie" + Chr(10) + FichierUserLibrary$ + Chr(10) + "a été créé avec succès", #PB_MessageRequester_Ok | #MB_ICONINFORMATION)
     Else
          MessageRequester("Infos", "La librairie" + Chr(10) + FichierUserLibrary$ + Chr(10) + "n'a pas été créé", #PB_MessageRequester_Ok | #MB_ICONERROR)
     EndIf
     
EndProcedure



Procedure.l CreateAsmFile(FichierPureBasic$)
     ; Retourne #true si le fichier asm a correctement été créé sinon retourne une valeur négative
     ; qui dépend du lieu de l'erreur, permet de trouver rapidement ou se situe l'erreur
     ; supprime la librairie si elle existait dans le dossier PureLibraries sinon erreur de
     ; compilation avec 4.30 beta 4 et 4.20
     
     Protected extension$ = LCase(GetExtensionPart(FichierPureBasic$))
     ; mémorise le nom du fichier asm avec le chemein complet
     Protected FichierAsm$ = ""
     ; mémorise le nom du fichier exe, mais en fait la variable est vide
     Protected FichierExe$ = ""
     ; mémorise le chemin et le nom du fichier asm initial créé par PB
     Protected FichierInitialAsm$ = ""
     ; mémorise le nom et le chemin de la libraire PB (userlibrairie)
     Protected FichierUserLibrary$ = ""
     ; mémorise la chaine retournée par le compilateur lors de la création du fichier asm
     Protected Sortie$ = ""
     ; mémorise le résultat de la fonction Runprogram
     Protected Compilateur
     ; compteurs de boucle pour éliminer les 0 de fin de chaine d'erreur qui ne s'affiche pas
     ; correctement dans un messagerequester
     Protected i, len_chaine
     
     ; on teste si le fichier se fini par "pb ou pbi"
     ; si oui on continue sinon on retourrne #False
     
     Select extension$
          Case "pb"
               FichierAsm$ + Mid(GetFilePart(FichierPureBasic$), 1, Len(GetFilePart(FichierPureBasic$))-2) + "asm"
               ; on fixe le nom du fiche executable
               FichierExe$ + Mid(GetFilePart(FichierPureBasic$), 1, Len(GetFilePart(FichierPureBasic$))-2) + "exe"
               
          Case "pbi"
               FichierAsm$ + Mid(GetFilePart(FichierPureBasic$), 1, Len(GetFilePart(FichierPureBasic$))-3) + "asm"
               ; on fixe le nom du fiche executable
               FichierExe$ + Mid(GetFilePart(FichierPureBasic$), 1, Len(GetFilePart(FichierPureBasic$))-3) + "exe"
               
          Default
               ; ce n'est pas un fichier PB, on quitte
               ProcedureReturn -1
               
     EndSelect
     
     ; effacement de la librairie du dossier UserLibraries
     FichierUserLibrary$ = #PB_Compiler_Home + "PureLibraries\UserLibraries\" + gProject\LibName
     DeleteFile(FichierUserLibrary$)
     
     ; donne le bon chemin au fichier asm
     FichierAsm$ = GetPathPart(FichierPureBasic$) + gProject\Name + "\" + FichierAsm$
     
     ; le fichier asm Prebasic.asm est créé dans le dossier de l'éxécutable qui le crée
     FichierInitialAsm$ = GetCurrentDirectory() + "PureBasic.asm"
     
     ; on efface le fichier asm qui existerait éventuellement sous le même nom et sous le nom PureBasic.asm
     ; on efface éventuellement le fichier asm plus ancien
     SetFileAttributes(FichierAsm$, #PB_FileSystem_Normal)
     DeleteFile(FichierAsm$)
     
     ; on efface éventuellement le fichier Pb asm
     SetFileAttributes(FichierAsm$, #PB_FileSystem_Normal)
     DeleteFile(FichierInitialAsm$)
     
     
     Compilateur = RunProgram(#PB_Compiler_Home + "\Compilers\pbcompiler", Chr(34) + FichierPureBasic$ + Chr(34) + " /INLINEASM /COMMENTED /EXE " + Chr(34) + FichierExe$ + Chr(34) , "", #PB_Program_Open | #PB_Program_Read | #PB_Program_Hide)
     If Compilateur
          While ProgramRunning(Compilateur)
               Sortie$ + ReadProgramString(Compilateur) + Chr(10)
          Wend
     EndIf
     
     ; on supprime les Chr(10) en partant de la fin de la chaine
     len_chaine = Len(Sortie$)
     For i = 1 To len_chaine
          If Right(Sortie$, 1) = Chr(10)
               ; on supprime
               Sortie$ = Left(Sortie$, Len(Sortie$)-1)
          Else
               Break
          EndIf
     Next
     
     
     If ProgramExitCode(Compilateur) = 0
          ; on teste si le résultat est Ok
          ; la dernière ligne retournée vaut
          ; "- Feel the ..PuRe.. Power -"
          ; If FindString(Sortie$, "- Feel the ..PuRe.. Power -", Len(Sortie$)-28)
          If FindString(Sortie$, "- Feel the ..PuRe.. Power -", 0)
               ; on efface le fichier executable créé
               DeleteFile(FichierExe$)
               ; on renomme le fichier asm PureBasic.asm avec le nouveau nom
               If RenameFile(FichierInitialAsm$, FichierAsm$)
                    ProcedureReturn #True
               Else
                    ProcedureReturn -1
               EndIf
          Else
               MessageRequester("Erreur de compilation", "Le compilateur a retourné l'erreur suivante :" + Chr(10) + Sortie$, 16)
               ; on efface le fichier executable créé
               DeleteFile(FichierExe$)
               ProcedureReturn -2
          EndIf
     Else
          MessageRequester("Erreur de compilation", "Le compilateur a retourné l'erreur suivante :" + Chr(10) + Sortie$, 16)
          ; on efface le fichier executable créé
          DeleteFile(FichierExe$)
          ProcedureReturn -3
     EndIf
     
EndProcedure




Pour le code asm, il faut regarder car avec l'exemple suivant de code PB
Code:
ProcedureDLL FunctionTest(Param1.l)
     ProcedureReturn Param1 + 10
EndProcedure

ProcedureDLL FunctionTest2(Param1.l)
     ProcedureReturn Param1 + 20
EndProcedure


MessageRequester("", Str(FunctionTest(11)), 16)

les fichiers asm sont pratiquement vides et l'étiquette de déclaration est après le RET 4 ce qui fait planter lorsque je lance depuis PB


Code:
format MS COFF

public PB_FunctionTest



RET    4
PB_FunctionTest:

même chose pour la deuxième fonction

_________________
Documentation GDI + 1.0 PB 4.30 beta 4 et supérieur
PureIconManager


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Lun 17/Nov/2008 14:01 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 14/Déc/2004 13:56
Messages: 2656
Localisation: France > Basse-Normandie > Prés de Caen
Modifications effectuées et bug corrigé pour la création de fichier ASM et history.txt (to do list & roadmap) modifiés.

http://code.google.com/p/moebius-pb/source/detail?r=18

Récupère la dernière version du code en direction du serveur :)

_________________
Moebius : Doc FR / EN - Moebius 1.0


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Mar 18/Nov/2008 14:47 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 14/Déc/2004 13:56
Messages: 2656
Localisation: France > Basse-Normandie > Prés de Caen
J'ai enfin réussi à compiler une userlib :) sous WinXP / PB 4.30b4.

http://code.google.com/p/moebius-pb/downloads/list

La r21 :)

_________________
Moebius : Doc FR / EN - Moebius 1.0


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Mar 18/Nov/2008 15:59 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 22/Jan/2004 14:31
Messages: 3312
Pfffffffffffff


J'ai plein d'erreurs, tu as changé les dossiers des sources sur C... et faut que je recommence....

Dans le cas des tests qui plantent car c'est pas verrouillé, j'ai un plantage ici, procedure Moebius_Compile_Step1()

Voici une correction, il faut retourner une erreur si Compilateur = 0 sinon ça plante .

Code:
     If Compilateur
          While ProgramRunning(Compilateur)
               Sortie + ReadProgramString(Compilateur) + Chr(13)
          Wend
     Else
          ProcedureReturn -4
     EndIf

_________________
Documentation GDI + 1.0 PB 4.30 beta 4 et supérieur
PureIconManager


Dernière édition par Denis le Mar 18/Nov/2008 16:10, édité 1 fois.

Haut
 Profil  
 
 Sujet du message:
MessagePosté: Mar 18/Nov/2008 16:10 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 22/Jan/2004 14:31
Messages: 3312
Modifies les 2 procedures comme ceci car le deletedirectory échouait (je n'avais pas le dossier) et il ne se passait rien, j'ai mis un debug dans la 1ere procedure pour voir la valeur de retour en cas d'erreur.

Code:
ProcedureDLL Moebius_MainThread(Param.l)
     Debug "Moebius_Compile_Step0()"
     Protected retour.l
     retour = Moebius_Compile_Step0()
     If retour = #True
          Debug "Moebius_Compile_Step1()"
          Moebius_Compile_Step1()
          Debug "Moebius_Compile_Step2()"
          Moebius_Compile_Step2()
          Debug "Moebius_Compile_Step3()"
          Moebius_Compile_Step3()
          Debug "Moebius_Compile_Step4()"
          Moebius_Compile_Step4()
          Debug "Moebius_Compile_Step5()"
          Moebius_Compile_Step5()
          Debug "Moebius_Compile_Step6()"
          Moebius_Compile_Step6()
     Else
          Debug retour
     EndIf
EndProcedure

ProcedureDLL Moebius_Compile_Step0()
     ; 0. Cleaning & Preparing
     ;Cleans the old userlib
     If FileSize(#PB_Compiler_Home + "pureLibraries" + #System_Separator + "UserLibraries" + #System_Separator + gProject\LibName)>0
          DeleteFile(#PB_Compiler_Home + "pureLibraries" + #System_Separator + "UserLibraries" + #System_Separator + gProject\LibName)
     EndIf
     ;Prepares the location For Moebius
     Debug gConf_ProjectDir
     DeleteDirectory(gConf_ProjectDir, "*.*", #PB_FileSystem_Force | #PB_FileSystem_Recursive)
     If CreateDirectory(gConf_ProjectDir)
          If CreateDirectory(gConf_ProjectDir + "ASM" + #System_Separator)
               If CreateDirectory(gConf_ProjectDir + "DESC" + #System_Separator)
                    If CreateDirectory(gConf_ProjectDir + "LIB" + #System_Separator)
                         If CreateDirectory(gConf_ProjectDir + "OBJ" + #System_Separator)
                              ProcedureReturn #True
                         Else
                              ProcedureReturn #False-5
                         EndIf
                    Else
                         ProcedureReturn #False-4
                    EndIf
               Else
                    ProcedureReturn #False-3
               EndIf
          Else
               ProcedureReturn #False-2
          EndIf
     Else
          ProcedureReturn #False-1
     EndIf
     
EndProcedure

_________________
Documentation GDI + 1.0 PB 4.30 beta 4 et supérieur
PureIconManager


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Mar 18/Nov/2008 16:25 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 22/Jan/2004 14:31
Messages: 3312
Tu devrais trouver sur le forum anglais (gnozal je crois) une procedure qui donne le chemin ou est installé PB en fonction des versions de windows et celles de PB.

Il faut écrire une telle procedure pour s'affranchir des problèmes liés au chemin d'installation de PB. Si on trouve plusieurs version de PB, il faut demander (messagerequester) laquelle utiliser pour compiler

Il faut que tu inclues aussi une procedure pour redémarrer le compilateur de PB, qui sera lancée si la compilation a réussie (librairie créée).

Afficher aussi lorsque la compilation est terminée et si la librairie est créée.

A+

_________________
Documentation GDI + 1.0 PB 4.30 beta 4 et supérieur
PureIconManager


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Mar 18/Nov/2008 17:34 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 14/Déc/2004 13:56
Messages: 2656
Localisation: France > Basse-Normandie > Prés de Caen
Premier post

Argh dsl ! J'aurais du te prévenir ! :( (Pas l'habitude de travailler avec quelqu'un)

J'ai remplacé tout les variables en dur des chemins par un stockage en fichier ini.
Comme ca, d'un poste à l'autre (le tien, le mien, mon poste au taf), on stocke nos propres chemins purebasic.

J'ai ajouté juste avant les fonctions une balise ;@return value qui indique quel valeur est retournée et à quoi correspond le message d'erreur.

Second post
J'ai encore amélioré la suppression des fichiers du répertoire en vérifiant si le répertoire existe.

Troisième post
Voici la feuille de route prévue (avec tes idées ajoutés)
http://code.google.com/p/moebius-pb/sou ... istory.txt

_________________
Moebius : Doc FR / EN - Moebius 1.0


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Mar 18/Nov/2008 17:56 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 26/Avr/2004 0:40
Messages: 13084
bon courage les gars !! :)

dites moi , "moebius" va me permettre de faire mes librairies comme avec Tailbite c'est ça ??

sauf qu'en plus ce serai multi-plateforme ??!!! 8O

en tout ça bon courage , je regarde d'un oeil distrait votre boulot, parce que j'aurai bien du mal a y comprendre quelque chose :lol:

_________________
Image


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Mar 18/Nov/2008 18:43 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 14/Déc/2004 13:56
Messages: 2656
Localisation: France > Basse-Normandie > Prés de Caen
Dobro a écrit:
bon courage les gars !! :)

dites moi , "moebius" va me permettre de faire mes librairies comme avec Tailbite c'est ça ??

sauf qu'en plus ce serai multi-plateforme ??!!! 8O

en tout ça bon courage , je regarde d'un oeil distrait votre boulot, parce que j'aurai bien du mal a y comprendre quelque chose :lol:

Merci,

Moebius va permettre de créer des userlibs comme Tailbite mais sur Windows & Linux (ptet MacOs quand du monde se présentera) à partir de code purebasic. MultiPlateforme sans compter l'API bien sur.

Denis fait du super bon taf et me reprend pas mal de code avecmes erreurs à la pelle :)

_________________
Moebius : Doc FR / EN - Moebius 1.0


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Mar 18/Nov/2008 20:36 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 26/Avr/2004 0:40
Messages: 13084
Progi1984 a écrit:
Denis fait du super bon taf et me reprend pas mal de code avecmes erreurs à la pelle :)


oui mais lui ça surprends meme plus :lol:

toi par contre , que tu ai pu pondre ça , .... ça m'épate :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol:

_________________
Image


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Mar 18/Nov/2008 20:48 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 14/Déc/2004 13:56
Messages: 2656
Localisation: France > Basse-Normandie > Prés de Caen
Dobro a écrit:
Progi1984 a écrit:
Denis fait du super bon taf et me reprend pas mal de code avecmes erreurs à la pelle :)


oui mais lui ça surprends meme plus :lol:

toi par contre , que tu ai pu pondre ça , .... ça m'épate :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol:


LOL (MDR devant le PC) Merci

Disons que c'est un projet que j'ai en tête depuis maintenant six mois attenant à un big project (un an et demi de préparation) et j'ai étudié les codes de tailbite et tailbite pour linux depuis le début de l'été. Donc Merci du "compliment" et merci à Denis de m'aider.

_________________
Moebius : Doc FR / EN - Moebius 1.0


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Mer 19/Nov/2008 14:02 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 14/Déc/2004 13:56
Messages: 2656
Localisation: France > Basse-Normandie > Prés de Caen
Voilà, je reviens avec mes problèmes d'ASM :

Voici le fichier FunctionTrisQuad.asm pour la fonction FunctionTrisQuad :
Code:
format MS COFF

public PB_FunctionTrisQuad

extrn _Procedure4

_Procedure8:
PB_FunctionTrisQuad:

PUSH   ebx
PS8=12
XOR    eax,eax
PUSH   eax
; Protected Val.l = FunctionTestPriv(MyParam) * 2
PUSH   dword [esp+PS8+0]
CALL  _Procedure4
MOV    ebx,eax
ADD    ebx,ebx
MOV    dword [esp],ebx
; ProcedureReturn Val
MOV    eax,dword [esp]
JMP   _EndProcedure9
; EndProcedure
XOR    eax,eax
_EndProcedure9:
ADD    esp,4
POP    ebx
RET    4

et son code PB :
Code:
ProcedureDLL FunctionTrisQuad(MyParam.l)
  Protected Val.l = FunctionTestPriv(MyParam) * 2
   ProcedureReturn Val
EndProcedure


Et j'ai une erreur Polink :
Code:
POLINK: error: Unresolved external symbol '_Procedure4'.
POLINK: fatal error: 1 unresolved external(s).


Je me doute que c'est parceque ma fonction FunctionTrisQuad appelle une autre fonction privé (FunctionTestPriv). Mais comment puis je régler le problème ASMment parlant ? en renommant le procedure4 en PB_FunctionTestPriv ?

_________________
Moebius : Doc FR / EN - Moebius 1.0


Haut
 Profil  
 
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 65 messages ]  Aller à la page Précédente  1, 2, 3, 4, 5  Suivante

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye