Bonsoir à vous !
J'ai une classe Loader, qui s'occupe de charger une DLL ( la StormLib, qui permet de manipuler des archives au format MPQ et dont la doc et le code source sont disponibles ici : http://www.zezula.net/en/mpq/stormlib.html ) et les fonctions qui m'intéressent.
J'ai ensuite crée une classe mpqArchive, qui utilise les fonctions de la classe Loader, pour manipuler les archives ( Donc, ça permet de gérer le remplacement de fichier etc.., et cela facilement )
Seulement, j'ai du mal à écrire ma fonction QString mpqArchive::readFile(QString filename); dans ce que je pense être un standard. Et d'autre part, je n'arrive pas non plus à trouver un équivalent Qt au format HANDLE.
Voilà pour le moment ce que j'ai :
N'y a-t-il pas moyen de ne pas utiliser de char, et d'utiliser directement un QString ou un QByteArray, plutôt que de convertir par la suite ?
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
33
34
35
36
37 QString mpqArchive::readFile(QString filename) { if(h != NULL) // h correspond au HANDLE de mon fichier MPQ, qui est un membre de mon objet mpqArchive. { if(!hasFile(filename)) { qDebug() << "Fichier " << filename << " introuvable."; return QString(); } HANDLE hFile; quint32 fileSize; if(Loader::getInstance().SFileOpenFileEx(h, filename.toStdString().c_str(), 0, &hFile)) // Le loader, qui est un singleton qui charge la dll au lancement du programe, et qui permet dappeler les fonctions de la dll. { fileSize = Loader::getInstance().SFileGetFileSize(hFile); qDebug() << "Taille du fichier " << filename << " : " << fileSize; char fbuffer[fileSize]; Loader::getInstance().SFileReadFile(hFile, fbuffer, fileSize, 0); fbuffer[fileSize] = '\0'; return QString(fbuffer); } else { qDebug() << "Erreur lors de l'ouverture du fichier " << filename << "."; return QString(); } } else { qDebug() << "Pas de MPQ ouvert."; return QString(); } }
La fonction SFileReadFile() agit comme la fonction de l'API Windows ReadFile(), d'après la doc de la librairie.
Cordialement,
MegaBigboss
Partager