if (DirectDrawCreateEx(NULL, (void **)&lpdd, IID_IDirectDraw7, NULL)!=DD_OK)
return(0);
DirectDraw의 개체를 생성하는 코드 중에 일부분인데.
인수들 중에 두번 째 것이 '함수가 성공적으로 수행되면, 이곳에 COM인터페이스의 주소를 저장한다. lplpDD는 LPVOID형태이기 떄문에 캐스팅 되어야 한다.' 라고 나왔습니다.
대충은 이해가 살짝 되는데 문제는 (void **)&lpdd 이게 이해가 안됩니다.
(사실 C++ 내공이 좀 부족합니다만;; )
자세히 알려주세용=_=/
그런데 그 선언이 다시 살펴보면 이렇게 되있을겁니다. 제가 DDRAW를 쓰는 게 아니라서 자세하게 이름이 똑같지는 않을지 모르겠는데 아마 대충 이럴겁니다.
typedef IDirectDraw7* LPDIRECTDRAW7
이걸 다시 풀어서 생각해보면 결국 IDirectDraw7 *lpdd; 라고 선언된거죠
자 그럼 원래 내용으로 돌아와서
(void **)&lpdd
요 부분을 봅시다.
lpdd는 포인터로 선언된겁니다. 근데 &lpdd입니다? 그러니까 이건 포인터를 저장하고 있는 주소를 적은 겁니다. 그러니까 이중 포인터라서 void** 가 붙는 겁니다.