2009. 9. 15. 12:43
가변 길이 구조체
2009. 9. 15. 12:43 in 프로그래밍/Win32 Deep Inside
구조체중에,
와 같이, 끝에 BYTE 버퍼 형태의 [1]로 된 array로 구성된것이 있습니다.
이는, 가변 길이를 쉽게 하기 위한 트릭을 이용한 것이죠.
만약,
와 같이, 끝에 lpszName이 온다면 어떻게 될까요?
pstTest1에 pstTest2를 동적할당하여 copy하는 것이 좋은 예가 될 수 있습니다.
ST_TEST로 되어 있는 경우에는, 그냥,
가 가능하지만,
ST_TEST_PTR로 되어 있는 경우에는,
로 됩니다.
과연, 어떤것이 쉬울까요?
물론, ST_TEST가 훨씬 쉬워 보이지만, 익숙하지 않은 사람들에게는 힘들수도 있습니다.
이것은 옛날 C에서 많이 사용되는 tric으로,
C++에서는 되도록,
ST_TEST_PTR 형태의 class를 만들어, copy constructor, assign operator overloadding을 이용해
직관성을 높여서 구현하기도 합니다.
허나, C를 써야 하는 환경(native api)에서는 C++이 사용되지 않음으로, ST_TEST 형태의 구조체에
익숙해 져야 합니다.
참고로,
ST_TEST_PTR stTemp = {0,};
이 가능하지만,
ST_TEST stTemp = {0,}; 은 의미가 없습니다.
LPST_TEST pstTemp = NULL;
pstTemp = new BYTE[바이트];
pstTemp->dwCbLength = 바이트;
형태만 유효합니다.
와 같이, 끝에 BYTE 버퍼 형태의 [1]로 된 array로 구성된것이 있습니다.
이는, 가변 길이를 쉽게 하기 위한 트릭을 이용한 것이죠.
만약,
와 같이, 끝에 lpszName이 온다면 어떻게 될까요?
pstTest1에 pstTest2를 동적할당하여 copy하는 것이 좋은 예가 될 수 있습니다.
ST_TEST로 되어 있는 경우에는, 그냥,
가 가능하지만,
ST_TEST_PTR로 되어 있는 경우에는,
로 됩니다.
과연, 어떤것이 쉬울까요?
물론, ST_TEST가 훨씬 쉬워 보이지만, 익숙하지 않은 사람들에게는 힘들수도 있습니다.
이것은 옛날 C에서 많이 사용되는 tric으로,
C++에서는 되도록,
ST_TEST_PTR 형태의 class를 만들어, copy constructor, assign operator overloadding을 이용해
직관성을 높여서 구현하기도 합니다.
허나, C를 써야 하는 환경(native api)에서는 C++이 사용되지 않음으로, ST_TEST 형태의 구조체에
익숙해 져야 합니다.
참고로,
ST_TEST_PTR stTemp = {0,};
이 가능하지만,
ST_TEST stTemp = {0,}; 은 의미가 없습니다.
LPST_TEST pstTemp = NULL;
pstTemp = new BYTE[바이트];
pstTemp->dwCbLength = 바이트;
형태만 유효합니다.
'프로그래밍 > Win32 Deep Inside' 카테고리의 다른 글
WriteFile/ReadFile의 overlapped i/o 사용하기 (asynchronous, non-block, iocp) (3) | 2013.03.21 |
---|---|
Zombie Thread 오류로 인한 unknown/unloaded 오류 발견 & 대처법 (0) | 2010.10.20 |
열린 파일 찾기 (UnLocker) 소스 공유 (2) | 2010.08.23 |
DLL을 만들때의 최고의 습관 (DLLMain deadlock 회피) - (1) (1) | 2009.10.01 |
Kernel Object Handle의 정보(Type, Name) 구하기 (0) | 2009.09.29 |