Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
793 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Compiller une DLL

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Compiller une DLL

n°661429
Nandofive
Posté le 02-03-2004 à 20:36:09  profilanswer
 

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 :
  1. BOOL CWECompress::_DeCompress(BYTE **BufDest, BYTE *BufSrc)
  2. {
  3. BYTE *ptrRes = *BufDest;
  4. LONG k3;
  5. ULONG i,j;
  6. BYTE k,k2;
  7. i = 0;
  8. while (TRUE)
  9. {
  10.  if ((i & 0x100) == 0) // (i < 0x100) or (0x1000 <i < 0x10FF) ...
  11.  {
  12.   k = *BufSrc & 0xFF; // Get data and do data % FF
  13.   BufSrc++; // add pointer
  14.   i = k | 0xFF00; // i = 0xFF unito a k
  15.  }
  16.    
  17.  k2 = *BufSrc & 0xFF; // get data    
  18.  if (((BYTE) i & 1) == 0) // t = 0 se i pari, t = 1 se i dispari
  19.         // Literal
  20.  {
  21.   *ptrRes = (BYTE) k2; // res = k2
  22.   ptrRes++;// add pointer
  23.   BufSrc++;
  24.  }
  25.  else
  26.  {
  27.   if ((k2 & 0x80) != 0)  // k2 & 0x80 != 0 Solo se k2 > 0x80 il controllo passa
  28.           // Caso in cui abbiamo 1 solo byte per il comando,  
  29.           // nbit move = 4, nbitrepeat = 4
  30.   {
  31.    BufSrc++;// add pointer
  32.    if ((k2 & 0x40) != 0) // k2 & 0x40 != 0 Solo se k2 > 0xC0 il controllo passa
  33.    {
  34.     // blocco per copiare i bytes in plain mode
  35.     // nrepeatmax = 0xFE-0xB9 = 69 7 bit
  36.     // nrepeatmin = 0xC0-0xB9 = 7
  37.     k = k2 & 0xFF;// k = k2 & 0xFF
  38.     k3 = k - 0xB9;// k3 = k - 0xB9  k3 = numero ottenuto sottraendo k2 fatto passare
  39.     if (k == 0xFF)
  40.      break; // esci dal ciclo
  41.        
  42.     // ciclo che copia i k3 bytes in plain mode
  43.     while(k3-- >= 0) //sicuramente k3 > 0
  44.     {
  45.      k2 = *BufSrc & 0xFF;// get data
  46.      BufSrc++;// add pointer
  47.      ptrRes++;// add pointer      
  48.      *(ptrRes - 1) = (BYTE) k2; // write k2 on ptrRes
  49.     }
  50.                      
  51.     i = i >> 1;// i SHR 1
  52.     continue;
  53.    }
  54.    // questo j mi dirà quanto dovrò spostarmi indietro per ripetere k3+1 volte il  
  55.    // ciclo (max 16)
  56.    // max j = 16, k3 = 4 con BF
  57.    j = (k2 & 0x0F) + 1;// k2 & 0x0F = prendo gli ultimi 4 bit e sommo 1  
  58.    k3 = (k2 >> 4) - 7;// k2 >> 4 = tolgo gli ultimi 4 bit,e tolgo 7;
  59.    // k3 mi dice quante volte devo ripetere il byte + 1 volta del ciclo + 1 messa in precedenza
  60.    // es. 90 -> j = 1 [1 byte indietro], k3 = 90 >> 4 - 7 = 9 - 7 = 2  
  61.    // -> 2 + 1 + 1 = 4 volte
  62.                
  63.   }
  64.   else
  65.   {
  66.    // 2 bytes per il comando tipo 24 01
  67.    // nbit move = 14, nbitrepeat = 6
  68.    j = *(BufSrc + 1) & 0xFF;// get data (prendi il byte successivo)
  69.    BufSrc += 2;// add pointer by 2
  70.    k3 = (k2 >> 2) + 2;// k3 = togli ultimi 2 bit + 2 (24 = 11 volte infatti)
  71.    j = j | (k2 & 3) << 8;// j = j | (k2 & 3)*256
  72.    // max j = 1024, k3 = 33 con 7F FF
  73.    // numero di bytes da arretrare per poi scrivere k3 volte i bytes ritrovati
  74.    // es 24 01 -> j = 01 | (24 & 3) << 8 = 1 | 0 = 1, k3 = 24 >> 2 + 2 = 9 + 2 = 11
  75.    // -> 11 + 1 + 1 = 13 volte
  76.   }
  77.        
  78.   // ciclo per ripetere k3 volte + 1 il byte a partire dalla posizione -j    
  79.   for ( ; k3>=0; k3--) // loop until k3>=0
  80.   {
  81.    *ptrRes = *(ptrRes - j) & 0xFF;// write data from first (far j bytes) for k3 times
  82.    ptrRes++;
  83.   };
  84.  }
  85.  i = i >> 1;
  86.      
  87. }
  88.    
  89. return TRUE;
  90. }


 
 
Je pense qu' il faut définir ces fonction non ?
 
BYTE *ptrRes = *BufDest;
 
 LONG k3;
 ULONG i,j;
 BYTE k,k2;
 
 i = 0;
 
 
Merci.

mood
Publicité
Posté le 02-03-2004 à 20:36:09  profilanswer
 

n°661431
Nandofive
Posté le 02-03-2004 à 20:37:09  profilanswer
 

PS vous pouvez deleter mon post précédent svp les modos.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Compiller une DLL

 

Sujets relatifs
Attaquer une DLL Windows en Java...MFC + Dll + CSocket + CArchive = Probleme
Lancement dynamique d'une DLL sous DelphiDLL et instances...
[C++/DLL] Question existentiellement conceptuelle : DLL "persistante"DLL COM en MFC
[Delphi] Invalid Pointer Operation avec une string venant d'1 DLL.[Dll] Y a t'il un moyen de connaitre les specifs des fcts d'1 DLL?
Comment voir le code d'une Dll[C/VB] Créer un .exe en VB qui appelle une DLL écrite en C...
Plus de sujets relatifs à : Compiller une DLL


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR