2010-08-26 6 views
2

J'ai essayé d'utiliser la poignée hPipe comme suit l'exemple here:Comment convertir un tuyau poignée file_descriptor (int) pour la protobuf de Google

hPipe = CreateNamedPipe( 
     lpszPipename,    // pipe name 
     PIPE_ACCESS_DUPLEX,  // read/write access 
     PIPE_TYPE_MESSAGE |  // message type pipe 
     PIPE_READMODE_MESSAGE | // message-read mode 
     PIPE_WAIT,    // blocking mode 
     PIPE_UNLIMITED_INSTANCES, // max. instances 
     BUFSIZE,     // output buffer size 
     BUFSIZE,     // input buffer size 
     0,      // client time-out 
     NULL); 

ZeroCopyOutputStream* raw_output = new FileOutputStream(hPipe); 
CodedOutputStream* coded_output = new CodedOutputStream(raw_output); 

Mais obtenir une erreur:

'google::protobuf::io::FileOutputStream::FileOutputStream(int,int)' : cannot convert parameter 1 from 'HANDLE' to 'int' 

Et voici la signature:

FileOutputStream(int file_descriptor, int block_size = -1); 

Comment convertir un handle en file_desc riptor en C++?

MISE À JOUR

J'ai essayé le recommandé _open_osfhandle mais ne semble pas correct, les rapports:

error C2664: '_open_osfhandle' : cannot convert parameter 1 from 'HANDLE' to 'intptr_t' 

Répondre

2

Cela ressemble à ce que vous voulez est _open_osfhandle.

+0

Quels fichiers d'en-tête dois-je inclure en plus de 'io.h'? Maintenant, il signale '_O_TEXT' dans '_open_osfhandle (hPipe, _O_TEXT);' comme non défini .. – user198729

+0

Il semble que vous ayez aussi besoin de '#include '. –

+0

Semble '_open_osfhandle' n'est pas le bon, maintenant il signale' l'erreur C2664: _open_osfhandle: ne peut pas convertir le paramètre 1 de HANDLE à intptr_t' – user198729