Я внедряю dll файл в процесс, необходимо передавать массив DWORD из dll в другую программу.
Решил использовать пайпы.
Как передать с помощью пайп массив DWORD[2048]?
Код записи и чтения из пайпа:
void Write(LPCVOID Buffer)
{
HANDLE hPipe;
DWORD dwWritten;
hPipe = CreateFile(TEXT("\\\\.\\pipe\\Pipe"), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if (hPipe != INVALID_HANDLE_VALUE)
{
WriteFile(hPipe, Buffer, 1024, &dwWritten, NULL);
CloseHandle(hPipe);
}
}
DWORD* Read()
{
HANDLE hPipe;
DWORD buffer[1024];
DWORD dwRead;
hPipe = CreateNamedPipe(TEXT("\\\\.\\pipe\\Pipe"),
PIPE_ACCESS_DUPLEX,
PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT, // FILE_FLAG_FIRST_PIPE_INSTANCE is not needed but forces CreateNamedPipe(..) to fail if the pipe already exists...
1,
1024 * 16,
1024 * 16,
NMPWAIT_USE_DEFAULT_WAIT,
NULL);
while (hPipe != INVALID_HANDLE_VALUE)
{
if (ConnectNamedPipe(hPipe, NULL) != FALSE) // wait for someone to connect to the pipe
{
while (ReadFile(hPipe, buffer, sizeof(buffer) - 1, &dwRead, NULL) != FALSE)
{
/* add terminating zero */
buffer[dwRead] = '\0';
if (buffer != NULL) {
WriteFile(hPipe, NULL, 1, NULL, NULL);
return buffer;
}
break;
/* do something with data in buffer */
}
}
DisconnectNamedPipe(hPipe);
}
}
Этот код не рабочий. Что с ним не так? В случае с char* передает отлично.