Bonjour,
J'ai une fonction à utiliser pour compresser un fichier dans un format particulier. La seule chose que j'ai c'est une dll avec les entêtes des fonctions C++.
Voici la fonction C++ que je souhaite utiliser:
unsigned long compress(void* source, void* dest, unsigned long size)
Dans la mini doc fournie avec, j'ai juste la description de cette fonction:
- void* source = correspond aux données à compresser
- void* dest = buffer pour les données compressées
- unsigned long size = taille des données à compresser
- la fonction retourne la taille des données une fois compressées
Donc pour utiliser la dll, j'ai ajouté cette ligne avant l'implémentation:
function compress(source : Pointer; dest : Pointer; taille : Longword) : Longword; stdcall; external 'comp.dll';
Mais le problème ensuite est que je sais pas comment utiliser la fonction
Je suis pas très bon lorsqu'il s'agit d'utiliser des pointeurs ou des flux...
J'ai essayé ceci mais ça ne fonctionne pas, l'application plante avec une erreur "Access Violation at address xxxx"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
procedure TForm1.Button1Click(Sender: TObject);
var
tailleFichierSource : cardinal;
streamSource : Tfilestream;
streamDestination : TfileStream;
begin
//fichier à compresser
streamSource := Tfilestream.create('D:\test.dat', fmOpenRead or fmShareExclusive);
//destination ; le fichier test_c.dat est déja créé mais est vide
streamDestination := Tfilestream.create('D:\test_c.dat', fmOpenWrite or fmShareDenyWrite);
//récupère la taille du fichier à compresser
tailleFichierSource := streamSource.size;
try
//appel de la fonction
compress(streamSource,streamDestination,tailleFichierSource);
finally
//ferme les fichiers
streamDestination.Free;
streamSource.Free;
end;
end; |
Si quelqu'un a une idée... car je sais pas quoi faire de plus, je suis bloqué dessus depuis plusieurs heures. Merci d'avance
Partager