2014-12-18 5 views
3

임명 된 파이프를 통해 DWORD 배열을 보내려고하지만 임은 어떻게 하나의 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

msg = 0xDEADBEEF에 대한 하나의 플러스, 나를 chuckle..and 배고프. :) 또한, 나는 빠른 google 후에 무언가를 배웠다 : http://en.wikipedia.org/wiki/Hexspeak – jbowman

답변

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

전송할 때 붉은 깃발이 머리에서 나와야합니다. 유형 보증 언어 인 C++에서는 수동으로 유형을 덮어 쓰려고 할 때 위험 영역에 있습니다. WriteFile은 데이터에 대한 포인터를 필요로합니다. 데이터 자체를 제공했습니다. 대신 데이터에 대한 포인터를 제공해야합니다.

또한 호출이 실패 할 때 자세한 정보를 얻으려면 GetLastError을 사용하는 방법을 배우십시오.

+0

나의 영웅과 구세주! 고마워, 이제는 그걸 작동시킬 수있어! 편집 : 나는 대답을 받아 들일 때까지 성가신 5 분 제한. – Willy

관련 문제