Nandofive | DESOLER POUR LE MESSAGE TEST MAIS MON COMPTE N'ETAIT PAS ACTIVER POUR LES POST CET APRES MIDI ET J' AI EFFECTUER UN TEST. J' AI REEDITER LE MESSAGE MAIS JE N'EST PAS PU LE MODIFIER CAR UN MODERATEUR AVAIT CLOS LE SUJET . DESOLE!!!!
Bonjour a tous .
Voila j' ai une routine de décompréssion de fichier .bin ou sont stocké des image .BMP compréssé. Je ne connait rien au Visual C++
et cette routine a été écrite dans ce language.
On m' a dit que je pouvait compilé ma fonction dans une dll pour quel soit utilisé par mon prog visual basic.
Quelqu' un connait il le lien vers un tutorial qui traiterai ce sujet.
PS : Faut il que je définisse des fonction de mon code dans mon programme :
Code :
- BOOL CWECompress::_DeCompress(BYTE **BufDest, BYTE *BufSrc)
- {
- BYTE *ptrRes = *BufDest;
- LONG k3;
- ULONG i,j;
- BYTE k,k2;
- i = 0;
- while (TRUE)
- {
- if ((i & 0x100) == 0) // (i < 0x100) or (0x1000 <i < 0x10FF) ...
- {
- k = *BufSrc & 0xFF; // Get data and do data % FF
- BufSrc++; // add pointer
- i = k | 0xFF00; // i = 0xFF unito a k
- }
-
- k2 = *BufSrc & 0xFF; // get data
- if (((BYTE) i & 1) == 0) // t = 0 se i pari, t = 1 se i dispari
- // Literal
- {
- *ptrRes = (BYTE) k2; // res = k2
- ptrRes++;// add pointer
- BufSrc++;
- }
- else
- {
- if ((k2 & 0x80) != 0) // k2 & 0x80 != 0 Solo se k2 > 0x80 il controllo passa
- // Caso in cui abbiamo 1 solo byte per il comando,
- // nbit move = 4, nbitrepeat = 4
- {
- BufSrc++;// add pointer
- if ((k2 & 0x40) != 0) // k2 & 0x40 != 0 Solo se k2 > 0xC0 il controllo passa
- {
- // blocco per copiare i bytes in plain mode
- // nrepeatmax = 0xFE-0xB9 = 69 7 bit
- // nrepeatmin = 0xC0-0xB9 = 7
- k = k2 & 0xFF;// k = k2 & 0xFF
- k3 = k - 0xB9;// k3 = k - 0xB9 k3 = numero ottenuto sottraendo k2 fatto passare
- if (k == 0xFF)
- break; // esci dal ciclo
-
- // ciclo che copia i k3 bytes in plain mode
- while(k3-- >= 0) //sicuramente k3 > 0
- {
- k2 = *BufSrc & 0xFF;// get data
- BufSrc++;// add pointer
- ptrRes++;// add pointer
- *(ptrRes - 1) = (BYTE) k2; // write k2 on ptrRes
- }
-
- i = i >> 1;// i SHR 1
- continue;
- }
- // questo j mi dirà quanto dovrò spostarmi indietro per ripetere k3+1 volte il
- // ciclo (max 16)
- // max j = 16, k3 = 4 con BF
- j = (k2 & 0x0F) + 1;// k2 & 0x0F = prendo gli ultimi 4 bit e sommo 1
- k3 = (k2 >> 4) - 7;// k2 >> 4 = tolgo gli ultimi 4 bit,e tolgo 7;
- // k3 mi dice quante volte devo ripetere il byte + 1 volta del ciclo + 1 messa in precedenza
- // es. 90 -> j = 1 [1 byte indietro], k3 = 90 >> 4 - 7 = 9 - 7 = 2
- // -> 2 + 1 + 1 = 4 volte
-
- }
- else
- {
- // 2 bytes per il comando tipo 24 01
- // nbit move = 14, nbitrepeat = 6
- j = *(BufSrc + 1) & 0xFF;// get data (prendi il byte successivo)
- BufSrc += 2;// add pointer by 2
- k3 = (k2 >> 2) + 2;// k3 = togli ultimi 2 bit + 2 (24 = 11 volte infatti)
- j = j | (k2 & 3) << 8;// j = j | (k2 & 3)*256
- // max j = 1024, k3 = 33 con 7F FF
- // numero di bytes da arretrare per poi scrivere k3 volte i bytes ritrovati
- // es 24 01 -> j = 01 | (24 & 3) << 8 = 1 | 0 = 1, k3 = 24 >> 2 + 2 = 9 + 2 = 11
- // -> 11 + 1 + 1 = 13 volte
- }
-
- // ciclo per ripetere k3 volte + 1 il byte a partire dalla posizione -j
- for ( ; k3>=0; k3--) // loop until k3>=0
- {
- *ptrRes = *(ptrRes - j) & 0xFF;// write data from first (far j bytes) for k3 times
- ptrRes++;
- };
- }
- i = i >> 1;
-
- }
-
- return TRUE;
- }
|
Je pense qu' il faut définir ces fonction non ?
BYTE *ptrRes = *BufDest;
LONG k3;
ULONG i,j;
BYTE k,k2;
i = 0;
Merci. |