DirectX 9.0 의 소개 DirectX SDK 의 사용법 C 또는 C++ 에 의한 DirectX 프로그래밍 콜백 함수의 사용법   [목차열람] [주소복사] [슬롯비우기]
콜백 함수의 사용법
 
Microsoft DirectX 9.0

콜백 함수의 사용법


콜백 함수는 기본적으로 이벤트 핸들러의 1 개이며, 애플리케이션이 처리 해, 시스템이 호출한다. 보통, Microsoft® Windows® 애플리케이션에는 복수의 콜백 함수가 처리 되고 있어 각각 다른 그룹의 이벤트의 처리에 사용된다. 이벤트가 발생 하면, 시스템은 적절한 콜백 함수를 호출해 애플리케이션에 통지한다. 또, 보통, 콜백 함수는 파라미터 리스트를 보관 유지하고 있어, 시스템은 이 리스트를 사용해 이벤트에 관한 상세 정보를 애플리케이션에 건네준다. 콜백 함수의 가장 일반적인 예는, 윈도우 프로시저이다. 이 함수는, 시스템이 윈도우를 소유하는 애플리케이션에 Windows 메시지를 건네줄 때 사용한다.

Microsoft DirectX® 에서는, 콜백 함수를 다양한 목적으로 사용한다. 예를 들어, 시스템은 복수의 장치를 지원 하고 있다. Microsoft DirectInput® 는 각 장치를 장치 개체로 나타낸다. 장치 개체에는, 그 장치의 기능에 관한 상세 정보가 포함되어 있다. 보통, 애플리케이션이 사용자의 입력을 올바르게 처리하려면 , 이용 가능한 장치를 열거해, 장치 개체를 조사할 필요가 있다. 이 열거를 실행하려면 ,DIEnumDeviceObjectsCallback 콜백 함수를 처리 해야 한다.

열거를 실행하기 위한 최초의 처리는,IDirectInputDevice8::EnumObjects 의 호출이다. 다음에,DIEnumDeviceObjectsCallback 콜백 함수의 포인터를 메서드에 건네준다. 시스템은, 각 장치에 대해서 1 회씩 이 함수를 호출해, 장치의 기능에 관한 정보를 포함한 DIDEVICEOBJECTINSTANCE 구조체를 건네준다. 콜백 함수는, 이 정보를 처리한 후, 다음의 장치 개체를 요구하는 경우는 DIENUM_CONTINUE 를 돌려주어, 열거를 정지하는 경우는 DIENUM_STOP 를 돌려준다.

DirectX 에서는, 그 밖에도 다양한 콜백 함수가 다양한 목적을 위해서(때문에) 사용된다. 더 자세한 정보는, 각 DirectX 구성 요소의 문서를 참조할것.

콜백 함수의 처리

콜백 함수에는, 다양한 목적 및 용도가 있다. 이 때문에, 보통의 함수와 같게, 콜백 함수에 대해서도, 각 함수의 주제로 설명한다. 다만, 콜백 함수의 레퍼런스는, 보통의 애플리케이션 프로그래밍 인터페이스 (API)의 레퍼런스와 달리, 그 함수를 처리 하는 방법을 나타내는 템플릿이 되어 있다. 콜백 함수의 레퍼런스에는, 다음의 정보를 기재하고 있다.

콜백 함수는,CALLBACK 형 또는 WINAPI 형으로서 선언한다. 어느 쪽의 타입을 사용해도 괜찮다. 임의의 함수명을 사용할 수 있다. 문서로 사용되고 있는 이름은, 콜백 함수의 단순한 편의 위에의 라벨이다.

레퍼런스의 설명에 따라 함수를 처리 한다. 처리 방법의 자세한 것은, 각 함수나 애플리케이션의 요건에 따라서 다르다. 다양한 콜백 함수의 처리 방법의 예에 대해서는, 샘플 코드를 참조할것.

함수의 포인터를 적절한 DirectX 구성 요소에 건네준다. DirectX 구성 요소는, 이 함수 포인터를 사용해 함수를 호출한다. 이 포인터의 건네주는 방법은, 함수에 따라서 다르므로, 더 자세한 정보는 각 함수의 레퍼런스를 참조할것.

다음 코드는, DirectInput Joystick 샘플의 일부이다. 이 코드에는, 조이스틱의 축을 열거하기 위해서 사용되는 DIEnumDeviceObjectsCallback 의 처리의 기본적인 요소가 포함되어 있다.

// The function declaration
BOOL CALLBACK EnumAxesCallback( const DIDEVICEOBJECTINSTANCE* pdidoi,
                                VOID* pContext );
...
// Pass the function pointer to DirectInput by calling the 
// IDirectInputDevice9::EnumObjects method

if ( FAILED( hr = g_pJoystick->EnumObjects(EnumAxesCallback, 
                                            (VOID*) hDlg,
                                            DIDFT_AXIS )));

...

// The function implementation
BOOL CALLBACK EnumAxesCallback( const DIDEVICEOBJECTINSTANCE* pdidoi,
                                VOID* pContext )
{
// Process the information passed in through the two parameters
// Return DIENUM_CONTINUE to request the next device object
// Return DIENUM_STOP to stop the enumeration
}



© 2002 Microsoft Corporation. All rights reserved.
↑TOP