IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Handle windows -> stream stl


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 167
    Points : 69
    Points
    69
    Par défaut Handle windows -> stream stl
    Bonjour,

    J'ai fouillé un peu mais je n'ai rien trouvé de glorieux sur ce sujet...need help.
    J'ai une librairie qui s'occupe de gérer des images industrielles sous windows et qui du coup me fournit des HANDLE sur des fichiers car c'est sous windows. Le problème c'est que l'écriture sur le réseau avec WriteFile peut causer quelques problèmes...aussi l'une des idées consiste à écrire avec les stream stl qui ne posent pas le problème soulevé. La question est donc comment passer d'un HANDLE windows à un stream STL?

    (Si possible sans boost...mais mieux vaut une solution qu'aucune)
    Merci.

  2. #2
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Ah. J'allais justement dire que boost.io propose peut-être déjà un streambuf encapsulant les handles windows (il y a pour les FILE de sûr).
    Peut-être que ça y est dans STLsoft, M.Wilson encapsule régulièrement des trucs non portables dans sa lib.
    Sinon, l'idée est d'écrire un streambuf qui réalise la traduction. Cf les articles (pré-standards IIRC) de James Kanze sur les streambufs filtrants. Ils pourront te donner une idée de comment ça marche.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  3. #3
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    La possibilité de passer d'un handle windows ou d'un descripteur de fichier (fd) à un stream C++ a été définitivement supprimé depuis Visual C++ 7 avec l'adoption de la bibliothèque standard comme il est raconté dans cet article MSDN :
    - Vous ne pouvez pas créer des flux à partir des handles de fichier. (...)

    - Outre les changements décrits ci-dessus, les fonctions (...) suivant[e]s, qui sont des éléments de l'ancienne bibliothèque iostream, ont disparu dans nouvelle bibliothèque iostream :

    * fonction membre attach de filebuf, fstream, ifstream et ofstream

    * fonction membre fd de filebuf, fstream, ifstream et ofstream
    Tout ce qui reste c'est : (HANDLE) -> _open_osfhandle -> (fd) -> _fdopen -> (FILE *).

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 167
    Points : 69
    Points
    69
    Par défaut
    Merci, ça marche au poil!

    INT myFunction(HANDLE outStream, UCHAR *frameBuffer, DWORD bytesToWrite , DWORD *bytesWritten) :
    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
     
            intptr_t HPtr = (intptr_t) outStream;
    	int osfHandle = _open_osfhandle (HPtr, _O_RDONLY);
    	if(osfHandle==-1)
    	  {
    		fprintf(stderr, "WriteFile_STL: file can't be opened (HANDLE)!\n");
    		return OC_E_FILE_WRITE;
    	  }
    	FILE *fileH = _fdopen(osfHandle, "w+");
    	if (fileH == NULL) 
    	  {
    		fprintf(stderr, "WriteFile_STL: file can't be opened (FILE)!\n");
    		return OC_E_FILE_WRITE;
    	  }
    	*bytesWritten=fwrite (frameBuffer , 1 , bytesToWrite , fileH );
    	//fclose (fileH); //soit FILE* close soit HANDLE close...

  5. #5
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    //fclose (fileH); //soit FILE* close soit HANDLE close...
    Non, c'est fclose et fclose seulement qu'il faut appeler. La fermeture d'un flux entraîne systématiquement la fermeture du descripteur de fichier sous-jacent, entraînant à son tour la fermeture du handle windows sous-jacent.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Handle windows, par où commencer ?
    Par ManusDei dans le forum Threads & Processus
    Réponses: 3
    Dernier message: 03/05/2011, 15h13
  2. [API Windows] Convertir HANDLE en Stream
    Par ManusDei dans le forum Windows
    Réponses: 7
    Dernier message: 25/03/2011, 15h23
  3. Les handles windows
    Par saad.hessane dans le forum Langage
    Réponses: 7
    Dernier message: 05/08/2008, 19h00
  4. Réponses: 5
    Dernier message: 23/01/2007, 15h36
  5. [VB.NET]Handle Windows & Handle dot net
    Par olixelle dans le forum Windows Forms
    Réponses: 2
    Dernier message: 25/09/2006, 18h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo