@+
2 petites questions d'un linuxien
Re: 2 petites questions d'un linuxien
Donne toujours le log si tu veut un coup de main ainsi que le retour terminal.
@+
@+
Re: 2 petites questions d'un linuxien
Salut,
j'ai toujours la même erreur, mais peu importe car j'ai pu me faire une idée de l'engine3D sous windows.
Je n'ai toujours pas su résoudre mon problème de progressbar sous linux également.
En testant purebasic, je suis tombé sur l'api library que je me suis empressé de tester, j'ai à peu près tout compris sauf le callcfunction et callcfunctionfast ...
voici mes différents codes de tests, je me sers d'une librairie basique dynamique et statique compilée en C sous codeblocks avec gcc :
- premier test : import, ok pas de souci avec cette méthode
second test : utilisation de prototype, pas de souci, ça fonctionne bien également.
3ème test avec les fonctions callcfunction et callcfunctionfast, là je n'y comprend rien, je ne sais pas où j'ai tout faux (voir commentaires du code), au passage j'ai testé toutes les fonctions de library sauf islibrary
n'ayant que la version de démo pour l'instant, je ne peux pas compiler de librairie partagée, qq'un peut il me dire si le code ci dessous serait correct (c'est une retranscription de celui utilisé en C
j'ai encore un tas de questions à propos de l'api scintilla également
mais chaque chose en son temps.
merci par avance pour le coup de main de linuxiens
@+
j'ai toujours la même erreur, mais peu importe car j'ai pu me faire une idée de l'engine3D sous windows.
Je n'ai toujours pas su résoudre mon problème de progressbar sous linux également.
En testant purebasic, je suis tombé sur l'api library que je me suis empressé de tester, j'ai à peu près tout compris sauf le callcfunction et callcfunctionfast ...
voici mes différents codes de tests, je me sers d'une librairie basique dynamique et statique compilée en C sous codeblocks avec gcc :
- premier test : import, ok pas de souci avec cette méthode
Code : Tout sélectionner
; Divers essais sur les librairies extérieures.
; Code source de la librairie dynamique et statique :
;*********************************************************************
;int nbrAdd(int i1, int i2) //fonction 1 avec 2 arguments (une simple addition)
;{
; Return i1 + i2;
;}
;int nbrCarr(int n1) //fonction2 avec un seul argument (carré du nombre)
;{
;Return n1*n1;
;}
;*********************************************************************
;####################################################
;# tests avec une librairie partagée .so #
;####################################################
;# Méthode par import
Import "/home/choubibar/CodeBlocks/persolib/bin/Release/libpersolib.so" ; compilée en C (main.c) 5,25KB
nbrAdd(i1.i, i2.i)
nbrCarr(n1.i)
EndImport
a.i = nbrAdd(156,44)
b.i = nbrCarr(12)
If a
Debug "Méthode Import librairie partagée .so compilée en C => Total addition = " + Str(a) ; ça fonctionne bien !
Else
Debug "Erreur dans l'importation ou les arguments !"
EndIf
If b
Debug "Méthode Import librairie partagée .so compilée en C => Total carré = " + Str(b) ; ça fonctionne bien !
Else
Debug "Erreur dans l'importation ou les arguments !"
EndIf
;####################################################
;# tests avec une librairie statique .a #
;####################################################
Import "/home/choubibar/CodeBlocks/persostatic/libpersostatic.a" ; compilée en C (main.c) 888 Bytes
nbrAdd2(j1.i, j2.i)
nbrCarr2(n2)
EndImport
c.i = nbrAdd2(15,45)
d.i = nbrCarr2(13)
If c
Debug "Méthode Import librairie statique .a compilée en C => Total addition = " + Str(c) ; ça fonctionne bien !
Else
Debug "Erreur dans l'importation ou les arguments !"
EndIf
If d
Debug "Méthode Import librairie statique .a compilée en C => Total carré = " + Str(d) ; ça fonctionne bien !
Else
Debug "Erreur dans l'importation ou les arguments !"
EndIfCode : Tout sélectionner
;####################################################
;# tests avec une librairie partagée .so #
;####################################################
PrototypeC.i carre(nbr.i)
PrototypeC.i addition(nbr1.i, nbr2.i)
If OpenLibrary(0, "/home/choubibar/CodeBlocks/persolib/bin/Release/libpersolib.so" )
; tests avec prototype
Carr.carre = GetFunction(0, "nbrCarr")
res1 = Carr(10)
If res1
Debug "Méthode d'appel par prototype OK! => Résultat du carré : " + Str(res1)
Else
Debug "Erreur avec la méthode du prototype !"
EndIf
Add.addition = GetFunction(0, "nbrAdd")
res2 = Add(100, 50)
If res2
Debug "Méthode d'appel par prototype OK! => Résultat = " + Str(res2)
Else
Debug "Erreur avec la méthode du prototype !"
EndIf
CloseLibrary(0)
Else
Debug "librairie non ouverte !"
EndIf3ème test avec les fonctions callcfunction et callcfunctionfast, là je n'y comprend rien, je ne sais pas où j'ai tout faux (voir commentaires du code), au passage j'ai testé toutes les fonctions de library sauf islibrary
Code : Tout sélectionner
;####################################################
;# tests avec une librairie partagée .so #
;####################################################
;# Méthode par appel direct de fonction
If OpenLibrary(0, "/home/choubibar/CodeBlocks/persolib/bin/Release/libpersolib.so" )
; test des différentes fonctions de l'api library au passage ...
addition = GetFunction(0, "nbrAdd")
If addition
Debug "fonction nbrAdd trouvée avec son nom (GetFunction) ! "
Else
Debug "Erreur dans l'appel par nom"
EndIf
If ExamineLibraryFunctions(0)
n = 1
While NextLibraryFunction()
n2 = LibraryFunctionAddress()
Debug "Fonction n°" + Str(n) + " = " + LibraryFunctionName() + " : adresse : "+ Chr(34) + Str(n2) + Chr(34)
n+1
Wend
n3 = CountLibraryFunctions(0)
Debug Str(n3) + " fonctions trouvée au total !"
EndIf
; fin des tests de base
; début des tests avec callcfunction
res = CallCFunction(0, "nbrAdd",8) ; plantage ici !
; si 2 arguments ex 8, 10 résultat attendu 18, res n'est pas créé => erreur !
;si un seul argument ex : 8, res est créé mais donne le résultat erronné 16 (nbr additionné à lui-même) au lieu de 8.
If res
Debug "Méthode d'appel et d'argument OK! => Résultat = " + Str(res)
Else
Debug "Erreur dans l'appel ou les arguments passés !"
EndIf
carre = CallCFunction(0, "nbrCarr", 12) ;résultat correct ici ! (un seul argument)
If carre
Debug "Méthode d'appel et d'argument OK! =>Résultat du carré : " + Str(carre)
Else
Debug "Erreur dans l'appel ou les arguments passés !"
EndIf
; début des tests avec callcfunctionfast
addition2 = GetFunction(0, "nbrAdd")
res2 = CallCFunctionFast(*addition2, 8,10) ;plantage ici !
; si un seul argument est passé, plantage normal car la fonction nécessite bien 2 arguments
; si 2 arguements sont passés, seul le premier argument est pris en compte et la fonction retourne uniquement 8 au lieu de 18
If res2
Debug "Méthode par pointeur OK! => Résultat = " + Str(res2)
Else
Debug "Erreur dans l'appel par pointeur ou les arguments passés !"
EndIf
;carre2 = GetFunction(0,"nbrCarr")
;res3 = CallCFunctionFast(*carre2,0) ;plantage ici !
;If res3
;Debug "Méthode d'appel et d'argument OK! => Résultat du carré : " + Str(res3)
;Else
;Debug "Erreur dans l'appel ou les arguments passés !"
;EndIf
CloseLibrary(0)
Else
Debug "librairie non ouverte !"
EndIfCode : Tout sélectionner
;##########################################
; une librairie partagée .so en purebasic pour tests
;##########################################
ProcedureCDLL.i nbrAddPB(n1.i, n2.i)
ProcedureReturn n1 + n2
EndProcedure
ProcedureCDLL.i nbrCarrPB(n3)
ProcedureReturn n3*n3
EndProcedurej'ai encore un tas de questions à propos de l'api scintilla également
merci par avance pour le coup de main de linuxiens
@+
Re: 2 petites questions d'un linuxien
DéveloppeJe n'ai toujours pas su résoudre mon problème de progressbar sous linux également.
Code : Tout sélectionner
;##########################################
; une librairie partagée .so en purebasic pour tests
;##########################################
ProcedureCDLL.i nbrAddPB(n1.i, n2.i)
ProcedureReturn n1 + n2
EndProcedure
ProcedureCDLL.i nbrCarrPB(n3)
ProcedureReturn n3*n3
EndProcedurepour callcfunction et callcfunctionfast il me semble que cela dépend de la convention d'appel , certaine sont en cdecl d'autre non , d'ou à mon avis le plantage.
le mieux pour importé des fonctions est d'utilisé des prototypes.
Re: 2 petites questions d'un linuxien
Salut,G-Rom a écrit :Ton code est bon.
merci pour la confirmation, c'est déjà ça d'assimiler
J'ai également testé au cas où callfunction et callfunctionfast dans le cas d'un fcall plutôt qu'un cdecl sans plus de succès, normalement sous linux avec une compilation deC avec gcc je suis forcément en cdecl, heureusement il me reste le prototypage ou l'import qui fonctionnent tous les 2 à merveille ... en attendant je blackliste ces 2 fonctions pour éviter de mauvaises surprises.G-Rom a écrit : pour callcfunction et callcfunctionfast il me semble que cela dépend de la convention d'appel , certaine sont en cdecl d'autre non , d'ou à mon avis le plantage.
le mieux pour importé des fonctions est d'utilisé des prototypes.
concernant le progressbar sous linux, bien qu'utilisant ce code :
Code : Tout sélectionner
If OpenWindow(0, 0, 0, 320, 80, "Test du ProgressBarGadget", #PB_Window_ScreenCentered)
SetWindowColor(0,$4532FF) ; changement de couleur fenêtre OK
TextGadget (1, 10, 10, 250, 20, "ProgressBar", #PB_Text_Center)
ProgressBarGadget(0, 10, 30, 250, 30, 0, 100) ; bien que le flag "smooth" ne soit pas utiliser, pas de blocks sous linux
GadgetToolTip(0,"Ceci est une barre de progression") ;OK
SetGadgetState (0, 50)
SetGadgetColor(1,#PB_Gadget_BackColor,$00FF00) ; changement de couleur texte et fond OK
SetGadgetColor(1,#PB_Gadget_FrontColor,$0F00F0); OK
SetGadgetColor(0,#PB_Gadget_BackColor,RGB(0,56,83)); pas OK
SetGadgetColor(0,#PB_Gadget_FrontColor,$FF0F00);pas OK
Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
EndIfj'ai le backcolor et le frontcolor du gadget progressbar qui ne fonctionnent pas
je me retrouve avec un progressbar comme cela :

alors que le fond devrait être de couleur bleue de mémoire
et la barre de couleur rouge
le réglage des paramètres PB_Gadget_front et backcolor est sans effet sous linux (je n'ai pas encore testé si d'autres gadgets ont ce même comportement sous kubuntu)
@+
Re: 2 petites questions d'un linuxien
Pareil que toi pour la progress bar , sauf que le gadget est un peu "transparent" ce qui laisse passé la couleur de la fenêtre à certain endroit.
KDE c'est du GTK 2 aussi non ?
KDE c'est du GTK 2 aussi non ?
Re: 2 petites questions d'un linuxien
Salut,
en fait, ubuntu utilise gnome avec gtk+, kubuntu utilise kde avec qt
je ferai un test du code sous ubuntu pour voir, c'est bien possible que le problème vienne de là ...
@+
en fait, ubuntu utilise gnome avec gtk+, kubuntu utilise kde avec qt
je ferai un test du code sous ubuntu pour voir, c'est bien possible que le problème vienne de là ...
@+
Re: 2 petites questions d'un linuxien
Merci pour Ubuntu je le savais , je suis dessus 
donc pour résumé , on se retrouve avec 2 api complètement différentes...
il faudrais que fred confirme , mais pb supporte gnome il me semble.
donc pour résumé , on se retrouve avec 2 api complètement différentes...
il faudrais que fred confirme , mais pb supporte gnome il me semble.
Re: 2 petites questions d'un linuxien
Salut,
effectivement j'ai testé sur ubuntu le progressbar fonctionne très bien, donc méfiance avec certains paramètres selon les distributions linux....je suis à peu près certain que les gadgets 3D merdouillent chez moi également à cause de kde
@+
effectivement j'ai testé sur ubuntu le progressbar fonctionne très bien, donc méfiance avec certains paramètres selon les distributions linux....je suis à peu près certain que les gadgets 3D merdouillent chez moi également à cause de kde
@+
Re: 2 petites questions d'un linuxien
Rien à voir les gadget3D sont le fruit 100% d'ogre3D
Re: 2 petites questions d'un linuxien
Salut,
pour en revenir aux librairies, il faut qd même faire attention avec purebasic qd on utilise une fonction importée et il vaut mieux passer par une variable intermédiaire si on veut éviter certains plantages (voir mon code lignes 10 & 11).
ex :
Par contre, pas de souci avec le prototypage, je peux faire comme ceci sans mauvaise surprise:
bon à savoir tout ça
@+
pour en revenir aux librairies, il faut qd même faire attention avec purebasic qd on utilise une fonction importée et il vaut mieux passer par une variable intermédiaire si on veut éviter certains plantages (voir mon code lignes 10 & 11).
ex :
Code : Tout sélectionner
Import "/home/choubibar/CodeBlocks/persostatic/libpersostatic.a" ; compilée en C (main.c) 888 Bytes
nbrCarr2(n2)
EndImport
c.i = nbrCarr2(13)
Debug c ; OK
Debug "Résultat = " + Str(c) ;OK
Debug nbrCarr2(15) ;OK
Debug Str(nbrCarr2(12)) ;OK
;Debug "Résultat = " + Str(nbrCarr2(10)); ECHEC pas d'affichage mais le prog ne plante pas
;s$ = "Résultat = " + Str(nbrCarr2(5)) ; ECHEC + "invalid access memory"
tx$ = "Résultat " + Str(c)
Debug tx$ ;OK
t.s = "Résultat = "
d.s = Str(nbrCarr2(7))
e.i = nbrCarr2(8)
Debug t + d ;OK
Debug t + Str(e) ;OK
a.i = 10
b.i = 10
Debug "somme = " + Str(a+b) ;OK
Debug "Ecriture d'un nombre - changement de type " + Str(567) ;OKCode : Tout sélectionner
;####################################################
;# tests avec une librairie partagée .so #
;####################################################
PrototypeC.i carre(nbr.i)
PrototypeC.i addition(nbr1.i, nbr2.i)
If OpenLibrary(0, "/home/choubibar/CodeBlocks/persolib/bin/Release/libpersolib.so" )
; tests avec prototype
Carr.carre = GetFunction(0, "nbrCarr")
res1 = Carr(10)
Debug "résultat = " + Str(res1)
Debug "Résultat = " + Str(Carr(5)); calcul direct et changement de typage ok
CloseLibrary(0)
Else
Debug "librairie non ouverte !"
EndIf@+
Re: 2 petites questions d'un linuxien
PureBasic Utilise GTK pour la rendu de GUI. que ce soit sous KDE ou gnome , d'ou la différence de graphisme.
@+
@+
Re: 2 petites questions d'un linuxien
Salut,
dans le même ordre d'idée, il y a qques fonctions de dessin (2DDrawing) qui ne fonctionnent pas correctement sous kubuntu, par exemple dans l'exemple Image.pb, la boucle ne fonctionne pas parce que frontcolor() et line() sont sans effet
Dans keyboard.pb, l'action des touches, à part escape est sans effet, je n'ai pas tout débuggué car les fonctions de dessin ou 3D m'intéressent peu dans purebasic mais je soupçonne un problème au niveau de la fonction loadsprite() ou openscreen(), le logo purebasic s'affiche bizarrement (en tout cas pas comme le code dit qu'il devrait s'afficher), il y a surement d'autres petits soucis mais je ne me suis pas attardé dessus car je suis en version démo pour me faire une idée avant un achat éventuel.
autre série de remarques concernant la librairie scintilla.
Je me trompe peut être mais sous linux, l'appel à des lexers autre que container n'est pas possible avec la lib scintilla fournie (505,3 ko), au départ je me suis amusé à coder mon propre lexer (ce qui est plutôt long à faire) et en me plongeant dans les sources de scintilla pour me renseigner, j'ai carrément recompilé la librairie avec tous ses lexers (1,2 mo) et là miracle les lexers fonctionnent sans réinventer l'eau chaude dans purebasic . Je ne sais pas si c'est une limitation voulue par la démo ou si la librairie scintilla est incomplète dans sa version linux (demo ou pas)
@+
dans le même ordre d'idée, il y a qques fonctions de dessin (2DDrawing) qui ne fonctionnent pas correctement sous kubuntu, par exemple dans l'exemple Image.pb, la boucle ne fonctionne pas parce que frontcolor() et line() sont sans effet
Dans keyboard.pb, l'action des touches, à part escape est sans effet, je n'ai pas tout débuggué car les fonctions de dessin ou 3D m'intéressent peu dans purebasic mais je soupçonne un problème au niveau de la fonction loadsprite() ou openscreen(), le logo purebasic s'affiche bizarrement (en tout cas pas comme le code dit qu'il devrait s'afficher), il y a surement d'autres petits soucis mais je ne me suis pas attardé dessus car je suis en version démo pour me faire une idée avant un achat éventuel.
autre série de remarques concernant la librairie scintilla.
Je me trompe peut être mais sous linux, l'appel à des lexers autre que container n'est pas possible avec la lib scintilla fournie (505,3 ko), au départ je me suis amusé à coder mon propre lexer (ce qui est plutôt long à faire) et en me plongeant dans les sources de scintilla pour me renseigner, j'ai carrément recompilé la librairie avec tous ses lexers (1,2 mo) et là miracle les lexers fonctionnent sans réinventer l'eau chaude dans purebasic . Je ne sais pas si c'est une limitation voulue par la démo ou si la librairie scintilla est incomplète dans sa version linux (demo ou pas)
@+
Re: 2 petites questions d'un linuxien
Aucune idée , tout ce que je peut de dire , c'est que sous linux , ca fonctionne aussi bien que sous windows , mais il y a un temps d'adaptation pour comprendre les différences ^^dans le même ordre d'idée, il y a qques fonctions de dessin (2DDrawing) qui ne fonctionnent pas correctement sous kubuntu, par exemple dans l'exemple Image.pb, la boucle ne fonctionne pas parce que frontcolor() et line() sont sans effet
Dans keyboard.pb, l'action des touches, à part escape est sans effet, je n'ai pas tout débuggué car les fonctions de dessin ou 3D m'intéressent peu dans purebasic mais je soupçonne un problème au niveau de la fonction loadsprite() ou openscreen(), le logo purebasic s'affiche bizarrement (en tout cas pas comme le code dit qu'il devrait s'afficher), il y a surement d'autres petits soucis mais je ne me suis pas attardé dessus car je suis en version démo pour me faire une idée avant un achat éventuel.
je pense que les exemples ne sont pas à jour par rapport à la démo.
Pour scintilla , j'en sais rien ^^
@+
Re: 2 petites questions d'un linuxien
Salut,
merci pour tes réponses...
il est temps pour moi de m'attaquer à un véritable programme avec purebasic, histoire de voir ce qu'il a dans le ventre et de me faire la main sur un peu toutes les fonctions disponibles ...
@+
merci pour tes réponses...
il est temps pour moi de m'attaquer à un véritable programme avec purebasic, histoire de voir ce qu'il a dans le ventre et de me faire la main sur un peu toutes les fonctions disponibles ...
@+
Re: 2 petites questions d'un linuxien
Pas de soucis , si tu rencontres des problèmes je serais ravis de te venir en aide 