LES TABLEAUX :-(

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: LES TABLEAUX :-(

Message par djes »

Dans VB tu vas sûrement devoir faire une série de copies à base de "faux" pokes :/

taz> :lol: je suis sûr que kcc range ses slips tout seul! sinon lui dire dans l'armoire, ça peut signifier aussi "dans le premier tiroir", donc @a(0) <=> @a() pour peu qu'il ne s'agisse pas d'un tableau de chaînes
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: LES TABLEAUX :-(

Message par Kwai chang caine »

Dans VB tu vas sûrement devoir faire une série de copies à base de "faux" pokes :/
En fin de compte ça fait une semaine que j'essai a peu pres tout ce que je trouve

Mais on a vite fait le tour RtlMoveMemory, lstrcpy, lstrlen et voila toute la puissance de VB en trois mots :D

Poke et PEEK n'existe pas, et les seuls faux poke et peek que j'ai trouvé etaient a base de RtlMoveMemory.
J'ose meme pas demander sur un forum VB, j'vais encore me faire jeter, a cause de PB :(

Et meme "gougle" il retourne rien d'autre que ces 3 fonctions

Alors j'en ai tellement marre que je me suis dit je vais faire "queque" chose qui veut pas FRED :oops:
Puisque j'ai ma DLL, je vais mapper la fonction PEEKS de FRED...

Et ben hihihi !!!! j'y arrive paaaaaaaaas hihihi !!!! depuis 4 heures que j'essaye, ne vous trompez pas..c'est pas drole...c'est les nerfs :lol:

A cause je pense cette fois du BSTR :(
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
TazNormand
Messages : 1297
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Re: LES TABLEAUX :-(

Message par TazNormand »

Pourquoi tu veux absolument passer par la mémoire pour échanger entre VB et PB ???

Il me semble que Dobro t'avais conseillé de passer par un/des fichier(s), ce qui me paraît aussi beaucoup plus simple.

Peux-tu me dire :
1° Quelles type de données doivent être échangées entre les 2 "basics" ?
2° En gros ce que fait le prog VB et que fait le prog PB ?
3° Pourquoi tu as exclu d'emblée le fichier "d'échange" ?

J'ai cru comprendre le côté "sensible" de tes développements, mais parfois, rien ne sert de réinventer la roue, ou de se prendre le chou inutilement
Image
Image
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: LES TABLEAUX :-(

Message par Kwai chang caine »

Djes a écrit :Oulà, tu as raison, je me mélange les pinceaux! Je corrige mes posts
@DJES

Bah en fait j'ai presque tout compris sauf cette histoire de @a(0) et @a()

FLAITH m'a expliqué que en structure @a(0) = @a() et que c'etait normal...bon admettons
Mais quand le tableau est "Normal" @a(0) est different de @a() comme je te l'ai montré sur le code d'avant.

Quand on fait un PeekL(@a()) ou s'apperçois qu'il est egal à @a(0) :roll:
C'est un truc de dingue

Code : Tout sélectionner

Dim a$(10)
a$(0) = "Kcc 0"
Debug @a$() 
Debug @a$(0)
Debug ""
Debug PeekL(@a$())
Debug PeekL(@a$(0))
C'est pour cette raison que j'avais fait un dessin pour comprendre ou lit PEEK et ou lit @a(x)
Mais personne il aime dessiner et me poser les PEEKL dans mon dessin a moi, puisse que tu m'as dit qu'il etait juste pour les @A(x) :cry:
Ou lisent ces PEEK et PEEK et colegrammes :?
Image
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: LES TABLEAUX :-(

Message par Kwai chang caine »

TazNormand a écrit :Pourquoi tu veux absolument passer par la mémoire pour échanger entre VB et PB ???
Il me semble que Dobro t'avais conseillé de passer par un/des fichier(s), ce qui me paraît aussi beaucoup plus simple.
Peux-tu me dire :
1° Quelles type de données doivent être échangées entre les 2 "basics" ?
2° En gros ce que fait le prog VB et que fait le prog PB ?
3° Pourquoi tu as exclu d'emblée le fichier "d'échange" ?
J'ai cru comprendre le côté "sensible" de tes développements, mais parfois, rien ne sert de réinventer la roue, ou de se prendre le chou inutilement
Oui oui, et je lui avait deja expliqué tout ça.
Donc je vais le refaire rien que pour toi que j'aime bien :D

ATTENTION !! comme je l'ai deja expliqué X fois....je vais faire court :mrgreen:

3° Pourquoi tu as exclu d'emblée le fichier "d'échange" ?
1/ Pour les fichiers a mon boulot on a l'UAC a fond, et je ne suis jamais sur de pouvoir creer un fichier meme ou est le programme principal, car il faut que je demande l'autorisation pour l'instal

2/ En plus j'aime pas les fichiers pour ce genre d'utilisation
En fait passer une variable, c'est assez simple, alors j'ai du mal a comprendre que ce soit si "impossible" pour un tableau qui est X variable, ni plus ni moins 8O

3/ Et troisieme raison, ce ne sont pas des fichiers que je passe mais des variables donc je trouve pas ça vraiment approprié, plus un peu du domaine de la bidouille, que de la vraie prog

DJES m'a donné un lien sur les filemapping, mais encore la c'est plutot pour les fichiers
Quand aux PIPES..apparement c'est plus pour les données pas trop longues.

Y'a encore la mémoire partagée, je crois :roll:
Et je crois aussi que les MUTEX, dont je connais que le nom, ont un raport avec ça aussi :roll:

1° Quelles type de données doivent être échangées entre les 2 "basics" ?
Comme je te l'ai dit.. "juste" un tableau de string "tout bete".
Mais comme le dit le soldat...la gestion de ces "choses" n'est pas de tout repos
Remarque c'est un bon exercice pour la gestion des memoires et tout le toutim :roll:

2° En gros ce que fait le prog VB et que fait le prog PB ?
C'est aussi "tout simple"...ça fait un mois que je le dit :oops:

1/ j'ai un tableau dans VB, je veux pouvoir, le modifier, l'agrandir, le retrecir dans la DLL et le retourner a VB.
Et ceci autant de fois que je le desire, come si il etait dans VB tout le temps quoi :roll:

2/ Ou bien mais si j'arrive a faire la une, la 2/ pourra se faire aussi.
J'ai rien dans VB, je demande "la liste des slips a KCC" (Pour reprendre un exemple que j'ai bien compris :lol:) et la DLL cherche dans les armoires des disques dur (par exemple) et elle me renvoie un tableau de string comme elle renverrait une variable string :D

Voila, j'ai au moins 10 codes differents, passage par bloc memoire, par pointeurs, par prototype, retour aussi par X methodes, les callbacks avec IDLE, et meme l'ASM avec XOMBIE :oops:
Je les remercie tous au passage 8)
MAis y'a toujours un "MIASME" qui fait que j'echange mes larmes de bonheur du debut par celles de la tristesse quand je me rend compte que je suis dans un cul de sac :cry:
Encore hier, je suis arrivé a faire ce que je voulais ...mais avec cette satané RTLMOVEMEMORY, car il n'y a qu'elle avec VB pour lire dans la memoire,

1/ j'envoie bien le tableau par pointeur, grace au code de SROD je lis le tableau VB avec la structure *strptr.INTEGER (Ca ça marche :D)
2/ Je copie le tableau dans la DLL comme ça, j'abandonne le tableau VB
3/ Je modifie le tableau DLL, comme si de rien etait, redim, dim et ce qui s'en suit ...
4/ Et c'est le retour le probleme...si je renvoie l'adresse du tableau de la DLL
Quand je fais un rtlmovememory, ce cake il enleve les pointeurs du tableau de la DLL pour les mettre dans le nouveau tableau de retour dans VB.
ET quand je veux reenvoyer un second tableau...la DLL est perdue car les pointeur de son tableau de transfert ont été déplacé la fois d'avant :cry:
Et la ...j'ai soit des hieroglyphes...soit un plantage et fermeture du RAD de VB :cry:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: LES TABLEAUX :-(

Message par djes »

Je ne sais pas si ça te parler plus comme ça... :/
On imagine que l'allocation mémoire a pu se faire à des adresses fixes (100, etc.)

Code : Tout sélectionner

;--- Compilation en ASCII et en 32 bits, pas en Unicode ni en 64 bits		
Dim a.s(3)		        ;Allocation mémoire 100-112
a.s(0) = "KCC1"		   ;Allocation mémoire 200-204, pokel(100, 200), pokes(200, 'KCC1')
a.s(1) = "KCC2"		   ;Allocation mémoire 300-304, pokel(104, 300), pokes(300, 'KCC2')
a.s(2) = "KCC3"		   ;Allocation mémoire 400-404, pokel(108, 400), pokes(400, 'KCC3')
a.s(3) = "KCC4"		   ;Allocation mémoire 600-604, pokel(112, 600), pokes(600, 'KCC4')
Debug @a()		        ;Résultat = 100
Debug a()		         ;Résultat = 100; PB renvoie l'adresse du tableau (et non pas l'adresse du premier élément du tableau de chaînes)si on ne spécifie pas d'élément
Debug @a(0)		       ;Résultat = 200 ; PB renvoie l'adresse de l'élément 0
Debug PeekL(@a())		 ;Résultat = 200 ; PB renvoie le contenu de l'adresse 100
Debug PeekL(a())		  ;Résultat = 200 ; PB renvoie le contenu de l'adresse 100
Debug PeekB(@a(0))		;Résultat = 75 ; PB renvoie le contenu de l'adresse 200, soit le code ASCII de 'K'
Debug PeekL(@a(0))		;Résultat = 826491723 ; soit le long trouvé à l'adresse 200, correspondant aux codes ASCII 'KCC1' à la suite
Debug PeekS(@a(0))		;Résultat = 'KCC1' ; c'est mieux comme ça ;)

Code : Tout sélectionner

Mémoire	
Adresse	Contenu
  100	    200
  104	    300
  108	    400
  112	    600
  (..)	
  200	    'K'
  201	    'C'
  202	    'C
  203	    '1'
  204	      0
  (..)	
  300	    'K'
  301	    'C'
  302	    'C
  303	    '2'
  304	      0
  (...)	
  400	    'K'
  401	    'C'
  402	    'C
  403	    '3'
  404	      0
  (...)	
  600	    'K'
  601	    'C'
  602	    'C
  603	    '4'
  604	      0
  (...)	

Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: LES TABLEAUX :-(

Message par Kwai chang caine »

Merci mille fois DJES de ta patience.
Parfois j'ose meme plus dire su j'ai compris ou pas parce que j'ai peur pour la santé mentale de celui qui se tue a m'expliquer :oops:

Bon alors, j'ai relu ton POST au moins 10 fois plus qu'un billet de loto si j'avais eu les 7 numeros :mrgreen:

Mais alors c'est pas facile pour moi, mais pas du tout
En fin de compte je crois que ça coince au niveau de ces deux lignes
Debug @a(0) ;Résultat = 200 ; PB renvoie l'adresse de l'élément 0
Debug PeekL(@a()) ;Résultat = 200 ; PB renvoie le contenu de l'adresse 100
J'ai du mal a comprendre comment ca peut etre le meme resultat, sans que ce soit la meme demande 8O

J'ai donc modifié mon dessin...parce que dans la tete de KCC, y'a pas comme dans les votres des racines carrés, des #{@, des 3241354451313131....y'a des dessins :oops:
C'est peut etre pour ça que je comprend pas les math.....faudrais me perler en JPG ou BMP :lol:

Alors dis moi si j'approche :

Image
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: LES TABLEAUX :-(

Message par djes »

Oui, ça me semble bon. Je ne vois pas ce que tu ne comprends pas, c'est tout simplement deux façons d'avoir l'information. Et il y en a d'autres.
En fait, je crois qu'il te manque quelques petites bases toutes bêtes. Tu as déjà vu un source PB transformé en assembleur?
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: LES TABLEAUX :-(

Message par Kwai chang caine »

Oulala !!!!!
J'ai deja mis trois jour pour oser vous deranger dans la rubrique ASM :oops:
L'assembleur c'est comme ma femme j'l'adore..mais j'la comprend pas du tout :D

Mon copain programmeur que j'ai croisé a paris, m'a dit la meme chose.
Pour comprendre les finesse du C, faut connaitre un peu l'ASM

Mais KCC il en est meme pas a la premiere lettre de l'alphabet en 4 ans :oops:
Alors le C......

Y'a rien a faire, j'ai avaler 10 boulettes de pain, mais l'arrette elle est toujours resté coincée
J'en reviens toujours pas que ca donne les memes resultats

Code : Tout sélectionner

Dim a.s(10)
a(0) = "Kcc 0"
Debug @a(0)
Debug PeekL(@a()) 
Mais je desespere pas....parce que des fois ça fait tilt....en cherchant sur autre chose.

J'ai une bonne nouvelle pour moi, et peut etre pour vous, par l'autruchement parce que j'arretterais peut etre de vous casser les tchaicowskis.

Je crois que j'ai trouvé une methode plus courte....avec RTLMOVEMEMORY
Ca a l'air de marcher, mais j'me mefie, car y'a un mois, mon code que j'utilisais de partout, je croyais deja que ça marchait.....et padaboum

Je vais continuer les essais :D
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: LES TABLEAUX :-(

Message par Kwai chang caine »

Est ce que un de vous a VB et se sentirait de verifier si je fou pas le wai dans mes memoires ???
Et si je peux compter sur ce code pour appliquer tous mees programmes dessus.
Car je crois que j'ai enfin trouvé un truc qui me va :D
Tout est la :
http://www.purebasic.fr/french/viewtopi ... 01#p104301

Car apparement ça a l'air de marcher..et quand ça marche ..c'est pas normal pour KCC :roll:
Dernière modification par Kwai chang caine le mer. 07/oct./2009 16:46, modifié 1 fois.
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Re: LES TABLEAUX :-(

Message par flaith »

Kwai chang caine a écrit :...Pour comprendre les finesse du C, faut connaitre un peu l'ASM...
Quand tu comprends l'utilisation des pointeurs en C tu connais déjà 90% du C :wink:
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: LES TABLEAUX :-(

Message par Kwai chang caine »

Bon ça me rassure.....parce que je voulais deja passer par le C...
Car c'est pas de tres evident de mettre son slip apres son pantalon :lol:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Re: LES TABLEAUX :-(

Message par flaith »

Un petit code qui va te montrer la différence entre tableau "simple" et tableau de structures

Code : Tout sélectionner

; Tableau de structure string
Dim a.String(9)

; Tableau de string
Dim b.s(10)

kcc$="Kcc "

For i = 0 To 9
  a(i)\s = kcc$+Str(i)
  b(i) = kcc$+Str(i)
Next i

OpenConsole()

PrintN("Adresse de kcc$ : $00"+Hex(@kcc$))
PrintN("")

PrintN("Adresse de a()  : $00"+Hex(@a()))
For i = 0 To 9
  PrintN("---Adresse de a("+Str(i)+") : $00"+Hex(@a(i))+" - PeekS(PeekL($00"+Hex(@a(i))+")) = "+PeekS(PeekL(@a(i))))
Next i

PrintN("")

PrintN("Adresse de b()  : $00"+Hex(@b()))
PrintN("Valeur adr @b() ($00"+Hex(@b())+") = $00"+Hex(PeekL(@b()))+" soit PeekL(@b())")
For i = 0 To 9
  PrintN("---Adresse de b("+Str(i)+") : $00"+Hex(@b(i))+" - PeekS($00"+Hex(@b(i))+") = "+PeekS(@b(i)))
Next i

Input()
CloseConsole()
:mrgreen:
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: LES TABLEAUX :-(

Message par Kwai chang caine »

Ouahhhh dis donc !!!
Merci beaucoup de cet exemple FLAITH 8)

Je sais pas si j'ai compris quelque chose..ou plutot si j'ai compris ce qu'il fallait :roll:
Mais en utilisant les structures, on est pas obligé de passer par PeekL pour avoir la valeur de la variables ??? 8O
Direct "PeekS(@a(1))" :D

Si c'est ça c'est super cool
Apparement VB gere ses variables comme ça, puisque l'entrée des pointeurs dans ma procedure se fait par *StrPtr.INTEGER.
Ou alors j'ai encore dit une grosse connerie :oops:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Re: LES TABLEAUX :-(

Message par flaith »

Kwai chang caine a écrit :...Mais en utilisant les structures, on est pas obligé de passer par PeekL pour avoir la valeur de la variables ??? 8O
Direct "PeekS(@a(1))"...
justement si, c'est sur le tableau simple "b" que l'on est pas obligé de passer par un PeekL

Par contre, c'est fort, essaye de faire

Code : Tout sélectionner

PrintN(PeekS(PeekL(@b())))
cela t'affiche bien "kcc 0"
essaye donc

Code : Tout sélectionner

PrintN(PeekS(PeekL(@b(0))))
:arrow: plantage assuré
pour avoir la valeur suivante de ton tableau "simple" il faudra donc faire :

Code : Tout sélectionner

PrintN(PeekS(PeekL(@b()+SizeOf(string))))
A-y-est on ta perdu corps et bien à partir de là :lol: :mrgreen:
Répondre