|
Iniciado por guest, jul., 07 2005 10:37 PM - 4 respostas |
| |
| | | |
|
| |
Publicado em julho, 07 2005 - 10:37 PM |
Bonjour,
Je dois transférer un librairie écrite en VB vers Windev. La librairie faisait appel à la dll kernel32.dll pour copier directement des bits d'une zone mémoire vers une autre. J'ai donc remplacé le tout par :
AppelDLL32("kernel32.dll", "RtlMoveMemory", &ceBit, ptrBits + curCol, 1)
&cebit étant l'adresse mémoire de destination du bit à copier, donc à mettre dans la variable ceBit ptrBits + curCol étant l'adresse de départ du bit 1 étant la taille (un seul bit)
Cependant, 2 points:
1. La méthode ne semble pas fonctionner, si je prends les mêmes valeurs pour mes paramètres en VB , ça fonctionne, mais pas en Windev. La valeur de ceBit après l'appel est toujours 0.
2. La vitesse d'exécution est environ décuplée par rapport à ce que j'avais en VB :S
Donc, est-ce que quelqu'un aurait une idée pourquoi ça ne fonctionnerait pas, ou alors encore mieux existe-il une méthode alternative pour fair ce que je veux faire?
Merci, Steven |
| |
| |
| | | |
|
| | |
| |
Publicado em julho, 08 2005 - 11:04 AM |
Tu devrais trouver ton bonheur dans le code suivant :
variable est une chaîne ASCIIZ sur 10 ptr est un entier acopier est une chaîne ASCIIZ sur 20
acopier = "Bonjour monsieur"
ptr = &acopier
Transfert(&variable,ptr+8,10)
Info(variable)
Bon dev
Yann |
| |
| |
| | | |
|
| | |
| |
Publicado em julho, 08 2005 - 8:20 PM |
Merci, ça marche impec
Le problème de lenteur par contre est toujours présent. Après analyse, ce n'est pas un morceau de code spécifique qui est lent mais plutôt l'ensemble de la méthode J'ai ruéssi à retrancher 10 secondes d'exécution sur les 35 secondes initiales en optimisant mon code, mais je trouve quand même étrange que la même méthode, en VB, me prenait 2 ou 3 secondes maximum!
Pour diminuer encore plus le temps d'exécution, il faudrait que je copie directement une série d'octets dans un tableau 2d! Pour le moment, je copie chaque octet bloc par bloc, compte tenu de la grosseur de mon tableau (2500 par 200 environ) ça fait 500 000 opérations de copie, un peu lourd!<
Quelqu'un sait si les tableaux sont représentés en mémoire de façon séquentielle? (un octet à la suite de l'autre avec des adresses consécutives, suivant l'ordre du tableau ==> (0,0):Adr1 (0,1):Adr2 (0,2):Adr3 etc. ) |
| |
| |
| | | |
|
| | |
| |
Publicado em julho, 09 2005 - 1:48 PM |
Cela te permettra de résoudre ton problème
vearray est un tableau de 10 par 10 monétaires i,j sont des entiers leTaille est un entier leEntier est un monétaires
leTaille = TableauInfo(vearray,tiTailleTotale) / 100
POUR i = 1 A 10 POUR j = 1 A 10 vearray[i,j] = i + j/10 FIN FIN
POUR i = 1 A 100 Transfert(&leEntier,&vearray + (i-1) * leTaille,leTaille) Trace(leEntier) FIN
Re-bon dev
Yann |
| |
| |
| | | |
|
| | |
| |
Publicado em julho, 11 2005 - 6:01 PM |
Merci, encore une fois ça marche!
Après un peu d'optimisation, la méthode qui initialement prenait 35 secondes prend maintenant 1.5 secondes |
| |
| |
| | | |
|
| | | | |
| | |
|