DirectX 9.0 의 소개 DirectX SDK 의 사용법 C 또는 C++ 에 의한 DirectX 프로그래밍 버젼 체크   [목차열람] [주소복사] [슬롯비우기]
버전 체크
 
Microsoft DirectX 9.0

버전 체크


애플리케이션에서는, 시스템으로 현재 이용 가능한 Microsoft® DirectX® 의 버전 정보가 필요하게 되는 경우가 있다. 예를 들어, 시스템에 낡은 버전의 DirectX 가 존재하는 경우, 애플리케이션은 그 버전에 기능의 범위를 맞추는지, 최신의 버전을 인스톨 할 필요가 생기는 일이 있다.

DirectX 9.0 에서는, 다음의 오퍼레이팅(operating)·시스템을 지원 하고 있다. 표는, 각 오퍼레이팅(operating)·시스템에 부속되는 DirectX 의 버전을 나타내고 있다.

operating systemDirectX 의 버전
Microsoft Windows® 98 GoldDirectX 5.2
Windows 98 SEDirectX 6.1a
Windows 2000DirectX 7.0
Windows Millennium Edition (Windows Me)DirectX 7.1
Windows XPDirectX 8.1

DirectX 의 버전 번호를 직접 얻어오는 방법은 없다. 다만, 각 버전은, 고유의 개체 및 인터페이스를 포함하고 있다. DirectX 의 모든 버전은, 이전의 모든 버전을 지원 하고 있다. 이 때문에, 특정의 버전 고유의 인터페이스 및 개체는, 그것들을 도입한 버전과 모든 후속 버전으로 지원 된다. 따라서, 필요한 버전이 이용 가능한가 어떤가를 조사하려면 , 그 버전 고유의 개체 또는 인터페이스가 존재할지 어떨지를 테스트 한다. 그러한 개체 또는 인터페이스가 존재하는 한, 그것보다 새로운 버전의 DirectX 를 사용하고 있어도, 애플리케이션은 정상적으로 기능한다.

예를 들어, DirectX 6.1 의 지원이 필요하다라고 한다. Microsoft DirectMusic® 개체 (CLSID_DirectMusic)는, DirectX 6.1 으로부터 도입된 개체이다. DirectMusic 개체의 존재는,CoCreateInstance 를 사용해 이 개체의 생성을 시도하는 것으로 테스트할 수 있다. 성공했을 경우는, 버전 6.1 이후가 인스톨 되고 있으므로, DirectX 6.1 의 모든 기능을 사용할 수 있다.

여기에서는, 각 버전 고유의 인터페이스 및 개체의 상세한 리스트는 가리키지 않기 때문에, DirectX 소프트웨어 개발 킷 (SDK)의 샘플의 섹션을 참조할것. 샘플의 1 개의 GetDXVersion 라고 하는 함수에는, DirectX 의 모든 버전에 관한 테스트가 포함되어 있다. GetDXVersion 는, 그 시스템에 존재하는 DirectX 의 버전에 대응하는 정수를 돌려준다. 이 정수가 필요한 버전의 번호와 같은가, 그것보다 크면, 애플리케이션은 정상적으로 동작한다. 샘플 코드는, SDK 의 루트 폴더의 \Samples\Multimedia\DXMisc\GetDXVer 에 있다.

operating system의 버전의 체크

애플리케이션에서는, DirectX 의 버전 뿐만이 아니라, 그것이 실행되고 있는 operating system나 인스톨 되고 있는 서비스 팩의 정보가 필요하게 되는 경우가 있다. operating system의 버전을 조사하려면 , Windows 함수의 GetVersionEx 를 사용하면 좋다. 이 함수는, 다음의 각종 정보를 포함한 OSVERSIONINFO 구조체를 돌려준다.

애플리케이션이 대응하고 있는 가장 낡은 operating system에 대해 조사하는 것이 일반적이다. 그 버전 이후가 인스톨 되고 있으면, 인스톨 한 애플리케이션은 정상적으로 실행된다.

  GetVersionEx 에 의해 돌려받는 operating system 정보는, DirectX 의 존재 또는 버전 번호를 조사하는 테스트에는 사용할 수 없다. 특히, 시스템이 Windows NT 베이스이다고 해도, DirectX 가 존재하지 않다고는 할 수 없다. 예를 들어, Windows 2000 operating system에는 DirectX 7.0 이후가 포함되어 있다. Windows NT 베이스의 operating system의 향후의 버전에서도, DirectX 의 버전이 포함되는 것이라고 예측된다. DirectX 의 존재와 버전 번호는, 전의 주제로 설명한 순서로 조사할 필요가 있다.

다음 샘플 함수는,GetVersionEx 를 사용해 operating system의 버전을 테스트하는 방법을 나타내고 있다. 인스톨 되고 있는 버전이 파라미터 리스트로 지정되고 있는 버전 이후이면, 함수는 TRUE 를 돌려준다. 이 경우, 인스톨 한 애플리케이션은 정상적으로 실행된다. 그 이외의 경우, 함수는 FALSE 를 돌려준다. 이것은, 애플리케이션을 인스톨 해도 올바르게 실행되지 않는 것을 의미한다.

#include <windows.h>
#include <stdio.h>
#include <tchar.h>

BOOL bIsWindowsVersionOK(DWORD dwWin9xMajor,
                         DWORD dwWin9xMinor,
                         DWORD dwWinNTMajor,
                         DWORD dwWinNTMinor,
                         WORD wWinNTSPMajor )

{
    OSVERSIONINFO           osvi;
	
    // Initialize the OSVERSIONINFO structure.

    ZeroMemory( &osvi, sizeof( osvi ) );
    osvi.dwOSVersionInfoSize = sizeof( osvi );

    GetVersionEx( &osvi );  // Assume this function succeeds.

    // Split code paths for NT and Windows 9x    
    if( osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS )
    {
        // Check the major version.
        if( osvi.dwMajorVersion > dwWin9xMajor )
            return TRUE;

        else if( osvi.dwMajorVersion == dwWin9xMajor )
        {
            // Check the minor version.
            if( osvi.dwMinorVersion >= dwWin9xMinor )
                return TRUE;
        }
    }

    else if( osvi.dwPlatformId == VER_PLATFORM_WIN32_NT )
    {
        // Check the major version.
        if( osvi.dwMajorVersion > dwWinNTMajor )
            return TRUE;

        else if( osvi.dwMajorVersion == dwWinNTMajor )
        {
            // Check the minor version.
            if( osvi.dwMinorVersion > dwWinNTMinor )
                return TRUE;

            else if( osvi.dwMinorVersion == dwWinNTMinor )
            {
                // Check the service pack.

                DWORD dwServicePack = 0;

                if( osvi.szCSDVersion )
                {
                    _stscanf(osvi.szCSDVersion,
                             _T("Service Pack %d"),
                             &dwServicePack );
                }
                return ( dwServicePack >= wWinNTSPMajor );
            }
        }
    }
    return FALSE;
}


© 2002 Microsoft Corporation. All rights reserved.
↑TOP