Initial commit: ROW Client source code
Game client codebase including: - CharacterActionControl: Character and creature management - GlobalScript: Network, items, skills, quests, utilities - RYLClient: Main client application with GUI and event handlers - Engine: 3D rendering engine (RYLGL) - MemoryManager: Custom memory allocation - Library: Third-party dependencies (DirectX, boost, etc.) - Tools: Development utilities 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
315
Library/dxx8/samples/Multimedia/Misc/GetDXVer/getdxver.cpp
Normal file
315
Library/dxx8/samples/Multimedia/Misc/GetDXVer/getdxver.cpp
Normal file
@@ -0,0 +1,315 @@
|
||||
//-----------------------------------------------------------------------------
|
||||
// File: GetDXVer.cpp
|
||||
//
|
||||
// Desc: Demonstrates how applications can detect what version of DirectX
|
||||
// is installed.
|
||||
//
|
||||
// (C) Copyright 1995-2001 Microsoft Corp. All rights reserved.
|
||||
//-----------------------------------------------------------------------------
|
||||
#include <windows.h>
|
||||
#include <windowsx.h>
|
||||
#include <basetsd.h>
|
||||
#include <ddraw.h>
|
||||
#include <dinput.h>
|
||||
#include <dmusici.h>
|
||||
|
||||
|
||||
|
||||
|
||||
typedef HRESULT(WINAPI * DIRECTDRAWCREATE)( GUID*, LPDIRECTDRAW*, IUnknown* );
|
||||
typedef HRESULT(WINAPI * DIRECTDRAWCREATEEX)( GUID*, VOID**, REFIID, IUnknown* );
|
||||
typedef HRESULT(WINAPI * DIRECTINPUTCREATE)( HINSTANCE, DWORD, LPDIRECTINPUT*,
|
||||
IUnknown* );
|
||||
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Name: GetDXVersion()
|
||||
// Desc: This function returns the DirectX version number as follows:
|
||||
// 0x0000 = No DirectX installed
|
||||
// 0x0100 = DirectX version 1 installed
|
||||
// 0x0200 = DirectX 2 installed
|
||||
// 0x0300 = DirectX 3 installed
|
||||
// 0x0500 = At least DirectX 5 installed.
|
||||
// 0x0600 = At least DirectX 6 installed.
|
||||
// 0x0601 = At least DirectX 6.1 installed.
|
||||
// 0x0700 = At least DirectX 7 installed.
|
||||
// 0x0800 = At least DirectX 8 installed.
|
||||
//
|
||||
// Please note that this code is intended as a general guideline. Your
|
||||
// app will probably be able to simply query for functionality (via
|
||||
// QueryInterface) for one or two components.
|
||||
//
|
||||
// Please also note:
|
||||
// "if( dwDXVersion != 0x500 ) return FALSE;" is VERY BAD.
|
||||
// "if( dwDXVersion < 0x500 ) return FALSE;" is MUCH BETTER.
|
||||
// to ensure your app will run on future releases of DirectX.
|
||||
//-----------------------------------------------------------------------------
|
||||
DWORD GetDXVersion()
|
||||
{
|
||||
DIRECTDRAWCREATE DirectDrawCreate = NULL;
|
||||
DIRECTDRAWCREATEEX DirectDrawCreateEx = NULL;
|
||||
DIRECTINPUTCREATE DirectInputCreate = NULL;
|
||||
HINSTANCE hDDrawDLL = NULL;
|
||||
HINSTANCE hDInputDLL = NULL;
|
||||
HINSTANCE hD3D8DLL = NULL;
|
||||
HINSTANCE hDPNHPASTDLL = NULL;
|
||||
LPDIRECTDRAW pDDraw = NULL;
|
||||
LPDIRECTDRAW2 pDDraw2 = NULL;
|
||||
LPDIRECTDRAWSURFACE pSurf = NULL;
|
||||
LPDIRECTDRAWSURFACE3 pSurf3 = NULL;
|
||||
LPDIRECTDRAWSURFACE4 pSurf4 = NULL;
|
||||
DWORD dwDXVersion = 0;
|
||||
HRESULT hr;
|
||||
|
||||
// First see if DDRAW.DLL even exists.
|
||||
hDDrawDLL = LoadLibrary( "DDRAW.DLL" );
|
||||
if( hDDrawDLL == NULL )
|
||||
{
|
||||
dwDXVersion = 0;
|
||||
OutputDebugString( "Couldn't LoadLibrary DDraw\r\n" );
|
||||
return dwDXVersion;
|
||||
}
|
||||
|
||||
// See if we can create the DirectDraw object.
|
||||
DirectDrawCreate = (DIRECTDRAWCREATE)GetProcAddress( hDDrawDLL, "DirectDrawCreate" );
|
||||
if( DirectDrawCreate == NULL )
|
||||
{
|
||||
dwDXVersion = 0;
|
||||
FreeLibrary( hDDrawDLL );
|
||||
OutputDebugString( "Couldn't GetProcAddress DirectDrawCreate\r\n" );
|
||||
return dwDXVersion;
|
||||
}
|
||||
|
||||
hr = DirectDrawCreate( NULL, &pDDraw, NULL );
|
||||
if( FAILED(hr) )
|
||||
{
|
||||
dwDXVersion = 0;
|
||||
FreeLibrary( hDDrawDLL );
|
||||
OutputDebugString( "Couldn't create DDraw\r\n" );
|
||||
return dwDXVersion;
|
||||
}
|
||||
|
||||
// So DirectDraw exists. We are at least DX1.
|
||||
dwDXVersion = 0x100;
|
||||
|
||||
// Let's see if IID_IDirectDraw2 exists.
|
||||
hr = pDDraw->QueryInterface( IID_IDirectDraw2, (VOID**)&pDDraw2 );
|
||||
if( FAILED(hr) )
|
||||
{
|
||||
// No IDirectDraw2 exists... must be DX1
|
||||
pDDraw->Release();
|
||||
FreeLibrary( hDDrawDLL );
|
||||
OutputDebugString( "Couldn't QI DDraw2\r\n" );
|
||||
return dwDXVersion;
|
||||
}
|
||||
|
||||
// IDirectDraw2 exists. We must be at least DX2
|
||||
pDDraw2->Release();
|
||||
dwDXVersion = 0x200;
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
// DirectX 3.0 Checks
|
||||
//-------------------------------------------------------------------------
|
||||
|
||||
// DirectInput was added for DX3
|
||||
hDInputDLL = LoadLibrary( "DINPUT.DLL" );
|
||||
if( hDInputDLL == NULL )
|
||||
{
|
||||
// No DInput... must not be DX3
|
||||
pDDraw->Release();
|
||||
FreeLibrary( hDDrawDLL );
|
||||
OutputDebugString( "Couldn't LoadLibrary DInput\r\n" );
|
||||
return dwDXVersion;
|
||||
}
|
||||
|
||||
DirectInputCreate = (DIRECTINPUTCREATE)GetProcAddress( hDInputDLL,
|
||||
"DirectInputCreateA" );
|
||||
if( DirectInputCreate == NULL )
|
||||
{
|
||||
// No DInput... must be DX2
|
||||
FreeLibrary( hDInputDLL );
|
||||
pDDraw->Release();
|
||||
FreeLibrary( hDDrawDLL );
|
||||
OutputDebugString( "Couldn't GetProcAddress DInputCreate\r\n" );
|
||||
return dwDXVersion;
|
||||
}
|
||||
|
||||
// DirectInputCreate exists. We are at least DX3
|
||||
dwDXVersion = 0x300;
|
||||
FreeLibrary( hDInputDLL );
|
||||
|
||||
// Can do checks for 3a vs 3b here
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
// DirectX 5.0 Checks
|
||||
//-------------------------------------------------------------------------
|
||||
|
||||
// We can tell if DX5 is present by checking for the existence of
|
||||
// IDirectDrawSurface3. First, we need a surface to QI off of.
|
||||
DDSURFACEDESC ddsd;
|
||||
ZeroMemory( &ddsd, sizeof(ddsd) );
|
||||
ddsd.dwSize = sizeof(ddsd);
|
||||
ddsd.dwFlags = DDSD_CAPS;
|
||||
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
|
||||
|
||||
hr = pDDraw->SetCooperativeLevel( NULL, DDSCL_NORMAL );
|
||||
if( FAILED(hr) )
|
||||
{
|
||||
// Failure. This means DDraw isn't properly installed.
|
||||
pDDraw->Release();
|
||||
FreeLibrary( hDDrawDLL );
|
||||
dwDXVersion = 0;
|
||||
OutputDebugString( "Couldn't Set coop level\r\n" );
|
||||
return dwDXVersion;
|
||||
}
|
||||
|
||||
hr = pDDraw->CreateSurface( &ddsd, &pSurf, NULL );
|
||||
if( FAILED(hr) )
|
||||
{
|
||||
// Failure. This means DDraw isn't properly installed.
|
||||
pDDraw->Release();
|
||||
FreeLibrary( hDDrawDLL );
|
||||
dwDXVersion = 0;
|
||||
OutputDebugString( "Couldn't CreateSurface\r\n" );
|
||||
return dwDXVersion;
|
||||
}
|
||||
|
||||
// Query for the IDirectDrawSurface3 interface
|
||||
if( FAILED( pSurf->QueryInterface( IID_IDirectDrawSurface3,
|
||||
(VOID**)&pSurf3 ) ) )
|
||||
{
|
||||
pSurf->Release();
|
||||
pDDraw->Release();
|
||||
FreeLibrary( hDDrawDLL );
|
||||
OutputDebugString( "Couldn't QI DDS3\r\n" );
|
||||
return dwDXVersion;
|
||||
}
|
||||
|
||||
// QI for IDirectDrawSurface3 succeeded. We must be at least DX5
|
||||
dwDXVersion = 0x500;
|
||||
pSurf3->Release();
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
// DirectX 6.0 Checks
|
||||
//-------------------------------------------------------------------------
|
||||
|
||||
// The IDirectDrawSurface4 interface was introduced with DX 6.0
|
||||
if( FAILED( pSurf->QueryInterface( IID_IDirectDrawSurface4,
|
||||
(VOID**)&pSurf4 ) ) )
|
||||
{
|
||||
pSurf->Release();
|
||||
pDDraw->Release();
|
||||
FreeLibrary( hDDrawDLL );
|
||||
OutputDebugString( "Couldn't QI DDS4\r\n" );
|
||||
return dwDXVersion;
|
||||
}
|
||||
|
||||
// IDirectDrawSurface4 was create successfully. We must be at least DX6
|
||||
dwDXVersion = 0x600;
|
||||
pSurf4->Release();
|
||||
pSurf->Release();
|
||||
pDDraw->Release();
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
// DirectX 6.1 Checks
|
||||
//-------------------------------------------------------------------------
|
||||
|
||||
// Check for DMusic, which was introduced with DX6.1
|
||||
LPDIRECTMUSIC pDMusic = NULL;
|
||||
CoInitialize( NULL );
|
||||
hr = CoCreateInstance( CLSID_DirectMusic, NULL, CLSCTX_INPROC_SERVER,
|
||||
IID_IDirectMusic, (VOID**)&pDMusic );
|
||||
if( FAILED(hr) )
|
||||
{
|
||||
FreeLibrary( hDDrawDLL );
|
||||
OutputDebugString( "Couldn't create CLSID_DirectMusic\r\n" );
|
||||
return dwDXVersion;
|
||||
}
|
||||
|
||||
// DirectMusic was created successfully. We must be at least DX6.1
|
||||
dwDXVersion = 0x601;
|
||||
pDMusic->Release();
|
||||
CoUninitialize();
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
// DirectX 7.0 Checks
|
||||
//-------------------------------------------------------------------------
|
||||
|
||||
// Check for DirectX 7 by creating a DDraw7 object
|
||||
LPDIRECTDRAW7 pDD7;
|
||||
DirectDrawCreateEx = (DIRECTDRAWCREATEEX)GetProcAddress( hDDrawDLL,
|
||||
"DirectDrawCreateEx" );
|
||||
if( NULL == DirectDrawCreateEx )
|
||||
{
|
||||
FreeLibrary( hDDrawDLL );
|
||||
OutputDebugString( "Couldn't GetProcAddress DirectDrawCreateEx\r\n" );
|
||||
return dwDXVersion;
|
||||
}
|
||||
|
||||
if( FAILED( DirectDrawCreateEx( NULL, (VOID**)&pDD7, IID_IDirectDraw7,
|
||||
NULL ) ) )
|
||||
{
|
||||
FreeLibrary( hDDrawDLL );
|
||||
OutputDebugString( "Couldn't DirectDrawCreateEx\r\n" );
|
||||
return dwDXVersion;
|
||||
}
|
||||
|
||||
// DDraw7 was created successfully. We must be at least DX7.0
|
||||
dwDXVersion = 0x700;
|
||||
pDD7->Release();
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
// DirectX 8.0 Checks
|
||||
//-------------------------------------------------------------------------
|
||||
|
||||
// Simply see if D3D8.dll exists.
|
||||
hD3D8DLL = LoadLibrary( "D3D8.DLL" );
|
||||
if( hD3D8DLL == NULL )
|
||||
{
|
||||
FreeLibrary( hDDrawDLL );
|
||||
OutputDebugString( "Couldn't LoadLibrary D3D8.DLL\r\n" );
|
||||
return dwDXVersion;
|
||||
}
|
||||
|
||||
// D3D8.dll exists. We must be at least DX8.0
|
||||
dwDXVersion = 0x800;
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
// DirectX 8.1 Checks
|
||||
//-------------------------------------------------------------------------
|
||||
|
||||
// Simply see if dpnhpast.dll exists.
|
||||
hDPNHPASTDLL = LoadLibrary( "dpnhpast.dll" );
|
||||
if( hDPNHPASTDLL == NULL )
|
||||
{
|
||||
FreeLibrary( hDPNHPASTDLL );
|
||||
OutputDebugString( "Couldn't LoadLibrary dpnhpast.dll\r\n" );
|
||||
return dwDXVersion;
|
||||
}
|
||||
|
||||
// dpnhpast.dll exists. We must be at least DX8.1
|
||||
dwDXVersion = 0x801;
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
// End of checking for versions of DirectX
|
||||
//-------------------------------------------------------------------------
|
||||
|
||||
// Close open libraries and return
|
||||
FreeLibrary( hDDrawDLL );
|
||||
FreeLibrary( hD3D8DLL );
|
||||
|
||||
return dwDXVersion;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user