2014-12-18 5 views
3

Im пытается отправить массив DWORDs по именованному каналу, но Im застревает, пытаясь выяснить, как отправить один DWORD. Это то, что я получил до сих пор:Отправить DWORD через named pipe

// Create a pipe to send data 
HANDLE pipe = CreateNamedPipe(
     L"\\\\.\\pipe\\my_pipe", 
     PIPE_ACCESS_OUTBOUND, 
     PIPE_TYPE_BYTE, 
     1, 
     0, 
     0, 
     0, 
     NULL 
    ); 

/* Waiting for the other side to connect and some error handling cut out */ 

//Here I try to send the DWORD 
DWORD msg = 0xDEADBEEF; 
DWORD numBytesWritten = 0; 
result = WriteFile(
    pipe, 
    (LPCVOID)msg, 
    sizeof(msg), 
    &numBytesWritten, 
    NULL 
    ); 

Но WriteFile(...) вызов не выполняется и возвращает false.

Приемный конец:

/* CreateFile(...) */ 
DWORD msg[128]; 
DWORD numBytesRead = 0; 
BOOL result = ReadFile(
    pipe, 
    msg, 
    127 * sizeof(DWORD), 
    &numBytesRead, 
    NULL 
    ); 

Am Я терпеть неудачу или я возглавляя правильное направление?

+1

Плюс один для msg = 0xDEADBEEF, заставлял меня хихикать и голодать. :) Кроме того, я узнал кое-что после быстрого google: http://en.wikipedia.org/wiki/Hexspeak – jbowman

ответ

4
result = WriteFile(
    pipe, 
    &msg, // <---- change this line 
    sizeof(msg), 
    &numBytesWritten, 
    NULL 
    ); 

Когда вы бросаете, красные флаги должны уходить в голове. На языке C++, языке с тифами, в тот момент, когда вы пытаетесь переопределить типы вручную, вы находитесь в опасной зоне. WriteFile ожидает указатель на данные. Вы сами предоставили данные. Вместо этого вы должны указать указатель на данные.

Кроме того, научитесь использовать GetLastError для получения дополнительной информации при сбое вызова.

+0

Мой герой и спаситель! Спасибо, теперь мне удалось заставить его работать! EDIT: Песочный 5-минутный лимит, пока я не смогу принять ответ. – Willy