2014-07-10 3 views
3

본인은 MS의 코드 예제에서 다음 코드를 참조하십시오PVOID 버퍼를 PCHAR로 변환하는 감각은 무엇입니까?

PVOID alignedBuffer[BUFFER_SIZE/sizeof(PVOID)]; 
PCHAR buffer = (PCHAR) alignedBuffer; 

hResult = FilterSendMessage(context->Port, 
           &commandMessage, 
           sizeof(COMMAND_MESSAGE), 
           buffer, 
           sizeof(alignedBuffer), 
           &bytesReturned); 

이를 PChar에 PVOID 변환의 의미 란 (alignedBuffer이 FilterSendMessage 호출에 재생으로 전달되는 구조의 배열을 개최한다),이 도움이 수행 aligment와 함께, 어떻게?

답변

4

PVOIDPCHAR으로 변환하지 않습니다. PVOID (부패가 PVOID *)의 배열을 PCHAR으로 변환 중입니다.

PVOID alignedBuffer[BUFFER_SIZE/sizeof(PVOID)]; 

PVOID들 (또는 void *들)의 어레이로서 alignedBuffer을 정의한다. 포인터의 배열로서 적절하게 정렬됩니다 (일반적으로 32 비트에서는 4 바이트, 64 비트에서는 8 바이트). 당신은 단순히

CHAR buffer[BUFFER_SIZE]; 

을 할 경우 CHAR들에 대한 정렬 요구 사항이 없기 때문에, 더 비슷한 보장이 없습니다.

+0

그리고 PVOID 배열을 PCHAR로 변환하고 PVOID 또는 LPVOID로 변환하지 않습니다 (FilterSendMessage 버퍼 매개 변수 유형은 LPVOID입니다). –

+0

@BransDs 나는 'PVOID' 대신에'PCHAR'로 변환하면 버퍼에서 출력을 읽는 데 도움이 될 것이라고 생각합니다. 왜냐하면 여러분이 void 포인터를 역 참조 할 수 없기 때문입니다. 그러나 그렇지 않으면 맛의 문제입니다. –