Bonjour,
Voila, j'essaye d'adapter lzma SDK/7zip, http://files.first-world.info/temp/7zip.zip et dés que je met #include <QObject> dans 7zMain.c j'ai prés de 600 erreurs, quelqu'un serai me dire pourquoi?
Merci.
Bonjour,
Voila, j'essaye d'adapter lzma SDK/7zip, http://files.first-world.info/temp/7zip.zip et dés que je met #include <QObject> dans 7zMain.c j'ai prés de 600 erreurs, quelqu'un serai me dire pourquoi?
Merci.
Salut,
7zMain.c => C
Qt => C++
Qt utilise des concepts que le C ne connaît que de très loin (les classes en sont le meilleur et le plus simple exemple). QObject commence en définissant une classe, ça tombe mal.
Ensuite, il faut que ton fichier passe bien par le moc. Or, avec son extension, il y a très peu de chances qu'un outil automatique puisse le comprendre.
Finalement, la manière. Très personnellement, dans ce genre de cas, je préfère dériver de QIODevice. Au lieu d'aller magouiller je-ne-sais-quoi dans un fichier du SDK, je crée, dans mon propre fichier, un dérivé de QIODevice, qui appelle les fonctions du SDK au bon moment.
Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.
Créer des applications graphiques en Python avec PyQt5
Créer des applications avec Qt 5.
Pas de question d'ordre technique par MP !
Je pense étre incapable de faire ça, je vais essayer quand même...
La version C++ n'as rien à voir avec la version C, c'est soit juste le décompateur lzma, ou tout la gui windows.
Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.
Créer des applications graphiques en Python avec PyQt5
Créer des applications avec Qt 5.
Pas de question d'ordre technique par MP !
J'ai besoin de pouvoir extraire, vérifié, lire une archive multi-fichiers supportant le lzma, soit 7z par exemple.
Si tu peux gérer l'archive dès le départ, je dirais de faire d'abord un .tar des fichiers, puis de le passer à LZMA. Pour la décompression, chemin inverse. Pour simplifier la gestion du .tar, un petit coup de QProcess.
Sinon... Il faudrait aller un peu plus en profondeur dans les formats des archives, et je n'ai pas de clé pour t'aider.
Si tu y arrives, fais-nous signe (même si c'est une piste pour lire les formats ou un truc du genre).
Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.
Créer des applications graphiques en Python avec PyQt5
Créer des applications avec Qt 5.
Pas de question d'ordre technique par MP !
J'ai la méthodologie pour y arrivé, j'ai fait un code, mais il me retourne le code SZ_ERROR_DATA:
J'ai du mal à comprendre les 2 derniers éléments de la fonction LzmaUncompress() qui ne sont pas documenté bien sur....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 QString fileName = QFileDialog::getOpenFileName(this, tr("Open File")); if(fileName!="") { QFile temp(fileName); if(temp.open(QIODevice::ReadOnly)) { QByteArray srcFile; srcFile=temp.readAll(); unsigned char *dest; size_t * dest_length=new size_t; const unsigned char * src = (const unsigned char *) srcFile.constData(); SizeT * src_lenght = new SizeT; *src_lenght = srcFile.size(); ui->labelSizeSource->setText(QString::number(srcFile.size())); int ret; ret = LzmaUncompress(dest, dest_length, src, src_lenght, src, LZMA_PROPS_SIZE); if(ret == SZ_OK) { ui->labelSizeDest->setText(QString::number(*dest_length)); //return SZ_OK; } else { ui->label_2->setText("error: "); ui->labelSizeDest->setText(QString::number(ret)); //return ret; } temp.close(); } }
Normalement, il ne sert à rien de les comprendre. Prends leurs valeurs par défaut indiquées dans la doc, ça ira parfaitement, normalement. Concernant l'avant-dernier paramètre, j'avais lu, je ne sais plus où, qu'il fallait mettre src+1, et non src.
Sinon, il me semble que le problème est plus LZMA-related, et non plus Qt-.
Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.
Créer des applications graphiques en Python avec PyQt5
Créer des applications avec Qt 5.
Pas de question d'ordre technique par MP !
Voila un code qui ne crash pas sous gcc, c'est déjà un début:
Hors LzmaUncompress(); retourne toujours 1 et je ne comprends pas ce que doit contenir le 5eme paramétre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 QByteArray data=temp.readAll(); unsigned char dest[1024*1024]; size_t dest_length = 1024*1024; const unsigned char * src = (const unsigned char *) data.constData(); SizeT src_lenght = data.size(); int ret=999999; int a = 0; while(a <15 && ret != SZ_OK) { ret = LzmaUncompress(dest, &dest_length, src, &src_lenght, src + a, LZMA_PROPS_SIZE); a++; } if(ret == SZ_OK) { data = (const char *) dest; ui->label_2->setText("Ok: "); //return SZ_OK; } else { ui->label_2->setText("Error"); //return ret; }
Tester avec un vrai fichier lzma ayant cette entéte:
Code : Sélectionner tout - Visualiser dans une fenêtre à part 5d00000002006205000000000000218bbc1ba78c3406ac7a7a8
Partager