DirectX 9.0 의 소개 DirectX SDK 의 사용법 C 또는 C++ 에 의한 DirectX 프로그래밍 버젼 체크 [목차열람] [주소복사] [슬롯비우기] |
Microsoft DirectX 9.0 |
애플리케이션에서는, 시스템으로 현재 이용 가능한 Microsoft® DirectX® 의 버전 정보가 필요하게 되는 경우가 있다. 예를 들어, 시스템에 낡은 버전의 DirectX 가 존재하는 경우, 애플리케이션은 그 버전에 기능의 범위를 맞추는지, 최신의 버전을 인스톨 할 필요가 생기는 일이 있다.
DirectX 9.0 에서는, 다음의 오퍼레이팅(operating)·시스템을 지원 하고 있다. 표는, 각 오퍼레이팅(operating)·시스템에 부속되는 DirectX 의 버전을 나타내고 있다.
operating system | DirectX 의 버전 |
---|---|
Microsoft Windows® 98 Gold | DirectX 5.2 |
Windows 98 SE | DirectX 6.1a |
Windows 2000 | DirectX 7.0 |
Windows Millennium Edition (Windows Me) | DirectX 7.1 |
Windows XP | DirectX 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 에 있다.
애플리케이션에서는, DirectX 의 버전 뿐만이 아니라, 그것이 실행되고 있는 operating system나 인스톨 되고 있는 서비스 팩의 정보가 필요하게 되는 경우가 있다. operating system의 버전을 조사하려면 , Windows 함수의 GetVersionEx 를 사용하면 좋다. 이 함수는, 다음의 각종 정보를 포함한 OSVERSIONINFO 구조체를 돌려준다.
애플리케이션이 대응하고 있는 가장 낡은 operating system에 대해 조사하는 것이 일반적이다. 그 버전 이후가 인스톨 되고 있으면, 인스톨 한 애플리케이션은 정상적으로 실행된다.
다음 샘플 함수는,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; }