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 :
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 d’appeler 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();
        }
    }
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 ?

La fonction SFileReadFile() agit comme la fonction de l'API Windows ReadFile(), d'après la doc de la librairie.

Cordialement,

MegaBigboss