• [^] # Re: petite question sur les transfert dans le protocole http

    Posté par . En réponse au journal petite question sur les transfert dans le protocole http. Évalué à 7.

    > que ce soit iod ou s qui sont descendant de QIODevice, ne supporte pas de void* dans les fonctions writeBlock ou readBlock, Le language C avec la libc conserve toujours un certain charme :-) ... fais un man write, open, read, malloc, realloc, free et tu auras un réponse évidente à ton problème. Faut pas faire de l'objet pour faire de l'objet. Vois aussi que readBlock attent un (char *) et non un (char **). Donc la fonction ne fait pas de malloc ! Danger ! Si la fonction attend un (char *), elle a tord. Désolé. C'est de la programmation des années 70. Face à ça, faire un cast de (void *) à (char *) n'est pas dramatique. Il n'y a pas de conversion, c'est pour virer un warning du compilo. voilà le proto de read() qui est posix : ssize_t read(int fd, void *buf, size_t count); (void *) pour les data. (size_t) pour la taille. Tu peux te permètres un cast. #include <stdio.h> struct { void * data ; size_t size ; // pas int. C'est pas un nombre c'est une taille ! } img ; img.size= iod.size(); if ((img.data=malloc(img.size)) == NULL) { perror(NULL) ; exit(EXIT_FAILURE) } iod.readBlock((char *)img.data,img.size); QTextStream ts(s); QString imgstr=QString("Content-type: image/%1\n\r").arg(imgformat)+QString("Content-length: %1\n\r").arg(img.size)+QString("Accept-Ranges: bytes\n\n"); ts<<imgstr; ts.unsetDevice(); s->writeBlock((char *)img.data, img.size); iod.close(); s->close(); free(img.data); }