我试图在命名管道上发送一个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
);
我是悲惨地失败还是我朝着正确的方向前进?
答案 0 :(得分:4)
result = WriteFile(
pipe,
&msg, // <---- change this line
sizeof(msg),
&numBytesWritten,
NULL
);
当你施放时,你的脑袋里应该出现红旗。在C ++中,一种类型安全的语言,当您尝试手动覆盖类型时,您将在危险区域中关闭。 WriteFile
期望指向数据的指针。您自己提供了数据。相反,你应该提供一个指向数据的指针。
此外,学习使用GetLastError
在呼叫失败时获取更多信息。