通过命名管道发送DWORD

时间:2014-12-18 12:17:20

标签: c++ windows named-pipes

我试图在命名管道上发送一个DWORD数组,但我试图找出如何发送单个DWORD。 这是我到目前为止所得到的:

// 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 
    );

我是悲惨地失败还是我朝着正确的方向前进?

1 个答案:

答案 0 :(得分:4)

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

当你施放时,你的脑袋里应该出现红旗。在C ++中,一种类型安全的语言,当您尝试手动覆盖类型时,您将在危险区域中关闭。 WriteFile期望指向数据的指针。您自己提供了数据。相反,你应该提供一个指向数据的指针。

此外,学习使用GetLastError在呼叫失败时获取更多信息。