Page 2 sur 3
Re: Constante API traduction en PB [Résolu]
Publié : jeu. 08/oct./2009 16:31
par djes
Mais c'est super l'hexa, c'est beaucoup mieux que le décimal pour visualiser la mémoire, puisqu'un qu'un octet peut se lire de façon fixe sur deux caractères; il suffit de savoir ça:
Binaire, Décimal, Hexa
0000, 0, 0
0001, 1, 1
0010, 2, 2
0011, 3, 3
0100, 4, 4
0101, 5, 5
0110, 6, 6
0111, 7, 7
1000, 8, 8
1001, 9, 9
1010, 10, A
1011, 11, B
1100, 12, C
1101, 13, D
1110, 14, E
1111, 15, F
Un ensemble de 4 bits est un quartet; la grande force de l'hexa est d'en faciliter la lecture.
Tu vois ainsi que $FF, c'est 11111111 en binaire ; que $AA, c'est 10101010, etc.
Mais bon j'arrête là, y'a plein de tutos sur le net.
Re: Constante API traduction en PB [Résolu]
Publié : jeu. 08/oct./2009 16:38
par Kwai chang caine
Oui oui, j'ai rien contre l'Hexa...c'est juste que le debogueur y donne l'adresse en decimal..et le visionneur de memoire en hexa...ce qui fait que ça m'a obligé a convertir pour comprendre
Ca aurait été bien si le panneau que j'ai mis en photo, avait eu les deux, ou alors au choix pour l'adressage de la memoire...vois tu

Re: Constante API traduction en PB [Résolu]
Publié : jeu. 08/oct./2009 17:00
par flaith
Ben, met tout en Hexa, tu verras, c'est plus sympa ... l'hexa

Re: Constante API traduction en PB [Résolu]
Publié : jeu. 08/oct./2009 17:16
par Kwai chang caine
Le decimaaaaal ..c'est banaaaaal !!!!
Le numeriiiique ..c'est fantastiiiiique !!!
Le binaaaiire ...c'est terre à terre !!!
Mais l'hexa bien plus sympaaaaaas !!!!
Lalalala !!!!!

Re: Constante API traduction en PB [Résolu]
Publié : ven. 09/oct./2009 7:26
par Kwai chang caine
Bon c'est pas tout ça...j'ai dansé toute la nuit, mais toujours pas trouvé comment détecter l'UNICODE avec le pointeur

Re: Constante API traduction en PB [Résolu]
Publié : ven. 09/oct./2009 10:01
par flaith
Comprend pas, bref j'ai modifié un peu mon code pour tester si une chaine est en Unicode :
Code : Tout sélectionner
Global BufferSize = 1024
Procedure.i Make_UA(text.s,flag.i=#PB_Ascii)
*str = AllocateMemory(BufferSize)
Select flag
Case #PB_Ascii
text + "Ascii"
Case #PB_Unicode
text + "Unicode"
EndSelect
PokeS(*str, text, -1, flag)
ProcedureReturn *str
EndProcedure
Procedure.i Check_UA(*adr_text)
Protected length.l = MemoryStringLength(*adr_text, #PB_Unicode)
If IsTextUnicode_(*adr_text, length * 2, #Null) ; * 2 obligatoire
;ou: If RtlIsTextUnicode_(*adr_text, length * 2, #Null)
ProcedureReturn #PB_Unicode
Else
ProcedureReturn #PB_Ascii
EndIf
EndProcedure
*adr_unicode = Make_UA("Ceci est un texte en ",#PB_Unicode)
*adr_ascii = Make_UA("Ceci est un texte en ")
Debug PeekS(*adr_unicode, -1, Check_UA(*adr_unicode))
Debug PeekS(*adr_ascii, -1, Check_UA(*adr_ascii))
Re: Constante API traduction en PB [Résolu]
Publié : ven. 09/oct./2009 10:09
par djes
Les deux programmes doivent savoir quel langage ils parlent, et pour ce faire soit le dire l'un à l'autre avant tout échange, soit utiliser systématiquement le même langage.
Re: Constante API traduction en PB [Résolu]
Publié : ven. 09/oct./2009 13:24
par Kwai chang caine
@DJES
Oui DJES je pourrais passer le parametre a chaque envoi...mais bon ça fait encore un truc a penser a chaque appel

Et quand a parler le meme language....ma DLL a des dizaines de fonctions, voir plus, qui fonctionnent en ASCII,
Une fois, j'ai essayé de la compiler en UNICODE et apres c'est plein d'autres qui ne fonctionnaient plus

Donc je prefere la laisser en ASCII, c'est aussi ce qui a de plus simple pour la gestion.
Et pour VB j'ai pas le "ouache"
Si vraiment on ne trouve pas, il me restera le parametre a passer, mais comme je te l'ai dit...c'est pas cool
@FLAITH
Vraiment merci de tous tes efforts.....si tu etais pres de moi...je crois que je t'embrasserais...(En tout bien tout honneur..bien sur

)
Je t'ai préparé un XLS et aussi la DLL et l'exe, tout reduit au maximum, pour qu'il n'y ai que le passage du tableau

Pour que tu vois de toi meme ce qui cloche
Dans les deux cas le MsgBox retourne 3
Parce que si toi tu comprend pas...alors imagine moi ....

Ca m'ennerve apres un mois de recherche...j'suis si pres de la fin....
http://erdsjb.free.fr/PureStorage/Flaith.zip
Encore merci

Re: Constante API traduction en PB [Résolu]
Publié : ven. 09/oct./2009 15:59
par Kwai chang caine
Je viens de mettre à jour le ZIP
Car en faisant des essais, je me suis rendu compte qu'en remplissant l'element zero des tableaux ça me repondait toujours UNICODE, aussi bien avec PB que VB
Par contre si je les laisse vide toujours ASCII

Et ceci avec les deux API
DJES a peut etre raison....elles sont bugguer ces API ???

Re: Constante API traduction en PB [Résolu]
Publié : ven. 09/oct./2009 16:23
par djes
Re: Constante API traduction en PB [Résolu]
Publié : ven. 09/oct./2009 16:41
par flaith
J'ai vu la source du code IsTextUnicode qui appelle en fait RtlIsTextUnicode
il y a un des check qui vérifie si la longueur est paire ou impaire

Re: Constante API traduction en PB [Résolu]
Publié : ven. 09/oct./2009 17:18
par flaith
je m'étais déjà fait ma propre modif dans la DLL :
Code : Tout sélectionner
ProcedureDLL.l Make_UA(text.s, flag.i=#PB_Ascii)
*str = AllocateMemory(1024)
Select flag
Case #PB_Ascii
text + "Ascii"
Case #PB_Unicode
text + "Unicode"
EndSelect
PokeS(*str, text, -1, flag)
ProcedureReturn *str
EndProcedure
ProcedureDLL.l Check_UA(*adr_text)
Protected length.l = MemoryStringLength(*adr_text, #PB_Unicode)
;If IsTextUnicode_(*adr_text, length * 2, #Null) ; * 2 obligatoire
If RtlIsTextUnicode_(*adr_text, length * 2, #Null)
ProcedureReturn #PB_Unicode
Else
ProcedureReturn #PB_Ascii
EndIf
EndProcedure
Procedure ArrayExe2Local(*Arraystr)
Select Check_UA(*strPtr)
Case #PB_Unicode
msg$ = "Unicode"
Default
msg$ = "Ascii"
EndSelect
MessageRequester("Resultat", msg$)
EndProcedure
ProcedureDLL ChangeNameAndAddLine(*Arraystr)
ArrayExe2Local(*Arraystr)
EndProcedure
et dans le code test :
Code : Tout sélectionner
Prototype P_ChangeNameAndAddLine(strPtr.l)
Prototype.l P_Make_UA(text.s, flag.i=#PB_Ascii)
Prototype.l P_Check_UA(*adr_text)
; Create original array
Global Dim ArrayString.s(10)
; Modify the array
If OpenLibrary(0, "TestUnicodeAscii.dll")
ChangeNameAndAddLine.P_ChangeNameAndAddLine = GetFunction(0, "ChangeNameAndAddLine")
Make_UA.P_Make_UA = GetFunction(0, "Make_UA")
Check_UA.P_Check_UA = GetFunction(0, "Check_UA")
flag.l = #PB_Unicode
For i.l = 0 To 10
*adr_array = Make_UA("Sentence " + Str(i) + " is ", flag)
ArrayString(i) = PeekS(*adr_array, -1, flag)
Debug PeekS(*adr_array, -1, Check_UA(*adr_array))
Next
ChangeNameAndAddLine(@ArrayString())
CloseLibrary(0)
EndIf
Mais aprés quelques tests je viens de remarquer que lorsque je met un texte unicode (par le peek) dans un tableau, le texte est d'office en Ascii (car on a pas compilé en Unicode)
Si on compile en Unicode, il faut revoir tout le programme car la fonction de vérification ne fonctionne plus
Il faut donc rester en Ascii, mais trouver une méthode qui insère les données dans le tableau en mode unicode, je vais faire des tests ce soir
Re: Constante API traduction en PB [Résolu]
Publié : ven. 09/oct./2009 17:28
par Kwai chang caine
@DJES
Je fais traduire la page et j'essaye de comprendre
@FLAITH
flaith a écrit :J'ai vu la source du code IsTextUnicode qui appelle en fait RtlIsTextUnicode
Je savais pas que l'on pouvais regarder les sources des API
flaith a écrit :il y a un des check qui vérifie si la longueur est paire ou impaire

Et c'est bien ça ou c'est pas bien ????

Ou la la ...a voir tes gros yeux, les memes gros yeux que me faisait ma tatan marie, quand j'etais pas sage,...... c'est que c'est pas bien ..

(
Mais aprés quelques tests je viens de remarquer que lorsque je met un texte unicode (par le peek) dans un tableau, le texte est d'office en Ascii (car on a pas compilé en Unicode)
Si on compile en Unicode, il faut revoir tout le programme car la fonction de vérification ne fonctionne plus
Je suppose que tu parle de PB la ?????
Il faut donc rester en Ascii, mais trouver une méthode qui insère les données dans le tableau en mode unicode, je vais faire des tests ce soir
C'est juste pour etre sur que je me suis pas mal expliqué.
Ce que je veux c'est que PB soit en ASCII, c'est a dire comme il est par defaut.....
Vu que je suis pas chinois et que j'arrive a faire des textes super long avec seulement 26 caracteres, j'ai pas besoin d'un alphabet de milliers de signe
En fait je me passerais bien de l'UNICODE si VB me forçait pas a passer par lui
Ce que je voudrais si c'est possible, c'est que comme VB envoie en UNICODE et bien la DLL repere que c'est de l'unicode et utilise le PeekS UNICODE
Et quand c'est PB, il envoie comme dab en ASCII et la DLL repere que c'est de l'ASCII et utilise le PeekS ASCII
Voila....c'est juste pour etre sur que tu ne travaille pas pour rien.
Je te donne deja bien assez de soucis
Je vais essayer ton code
Merci de ta patience
Re: Constante API traduction en PB [Résolu]
Publié : ven. 09/oct./2009 17:58
par flaith
Kwai chang caine a écrit :Je savais pas que l'on pouvais regarder les sources des API
sur le site de winehq (l'"émulateur" windows sous GNU/Linux)
Kwai chang caine a écrit :Je suppose que tu parle de PB la ?????
jawohl
Kwai chang caine a écrit :Ce que je voudrais si c'est possible, c'est que comme VB envoie en UNICODE et bien la DLL repere que c'est de l'unicode et utilise le PeekS UNICODE
Et quand c'est PB, il envoie comme dab en ASCII et la DLL repere que c'est de l'ASCII et utilise le PeekS ASCII
j'ai bien saisi le truc, mais comme j'ai pas vb faut bien tester avec PB, quoique on peut avoir VB 6 en téléchargement gratuit quelque part ou il est encore payant ?
Kwai chang caine a écrit :Voila....c'est juste pour etre sur que tu ne travaille pas pour rien.
Je te donne deja bien assez de soucis

T'inquiète ca m'amuse plutôt, je programme pendant mon travail ici
Kwai chang caine a écrit :Je vais essayer ton code
Merci de ta patience
De rien

Re: Constante API traduction en PB [Résolu]
Publié : ven. 09/oct./2009 19:01
par Kwai chang caine
j'ai bien saisi le truc, mais comme j'ai pas vb faut bien tester avec PB, quoique on peut avoir VB 6 en téléchargement gratuit quelque part ou il est encore payant ?
Bah oui...malgré la daube que c'est ....et le fait qu'il l'ai abandonné comme une vieille chaussette

Et ben, il est plus en vente introuvable et sur le marché de l'occase la version en boite, reste autour des 3000 Frs
Un peu cher, pour ce que c'est, je vous l'accorde, mais bon c'est un vieil amour....alors eu egart aux années passées ensemble...je me devais de lui donner une grosse pension suite a notre divorce et ma tromperie avec la belle "PB"
