mirror of
https://github.com/XWine1/XboxAudio2.git
synced 2026-07-24 12:32:42 -07:00
Add dynamic OS version check
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
cmake_minimum_required(VERSION 3.20)
|
cmake_minimum_required(VERSION 3.20)
|
||||||
project(XboxAudio2 LANGUAGES CXX ASM_MASM)
|
project(XboxAudio2 LANGUAGES CXX ASM_MASM)
|
||||||
|
add_subdirectory(lib)
|
||||||
|
|
||||||
file(GLOB_RECURSE XAUDIO_SOURCES CONFIGURE_DEPENDS "include/*.h" "source/*.cpp" "source/*.h" "source/*.asm")
|
file(GLOB_RECURSE XAUDIO_SOURCES CONFIGURE_DEPENDS "include/*.h" "source/*.cpp" "source/*.h" "source/*.asm")
|
||||||
add_library(XAudio2_9 SHARED ${XAUDIO_SOURCES})
|
add_library(XAudio2_9 SHARED ${XAUDIO_SOURCES})
|
||||||
@@ -12,3 +13,6 @@ target_link_libraries(XAudio2_9 PRIVATE ${FFMPEG_LIBRARIES})
|
|||||||
|
|
||||||
find_package(wil CONFIG REQUIRED)
|
find_package(wil CONFIG REQUIRED)
|
||||||
target_link_libraries(XAudio2_9 PRIVATE WIL::WIL)
|
target_link_libraries(XAudio2_9 PRIVATE WIL::WIL)
|
||||||
|
|
||||||
|
target_link_directories(XAudio2_9 PRIVATE lib)
|
||||||
|
target_link_libraries(XAudio2_9 PRIVATE kernelx)
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
*.exp
|
||||||
|
*.lib
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
file(GLOB DEF_FILES CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/*.def")
|
||||||
|
cmake_path(CONVERT "${DEF_FILES}" TO_NATIVE_PATH_LIST DEF_FILES)
|
||||||
|
|
||||||
|
foreach(DEF_FILE ${DEF_FILES})
|
||||||
|
get_filename_component(DEF_NAME_WE "${DEF_FILE}" NAME_WE)
|
||||||
|
|
||||||
|
execute_process(
|
||||||
|
COMMAND lib
|
||||||
|
/machine:x64
|
||||||
|
"/def:${DEF_FILE}"
|
||||||
|
"/out:${CMAKE_CURRENT_SOURCE_DIR}\\${DEF_NAME_WE}.lib"
|
||||||
|
RESULT_VARIABLE LIB_RESULT
|
||||||
|
ERROR_VARIABLE LIB_ERROR)
|
||||||
|
|
||||||
|
if(NOT LIB_RESULT EQUAL 0)
|
||||||
|
message(FATAL_ERROR "${LIB_ERROR}")
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
LIBRARY kernelx.dll
|
||||||
|
EXPORTS
|
||||||
|
GetVersionExW
|
||||||
+29
-16
@@ -47,25 +47,38 @@ BOOL WINAPI DllMain(
|
|||||||
_In_ DWORD fdwReason,
|
_In_ DWORD fdwReason,
|
||||||
_In_ LPVOID lpvReserved)
|
_In_ LPVOID lpvReserved)
|
||||||
{
|
{
|
||||||
|
OSVERSIONINFOW OsVersion = { sizeof(OsVersion) };
|
||||||
|
|
||||||
if (fdwReason != DLL_PROCESS_ATTACH)
|
if (fdwReason != DLL_PROCESS_ATTACH)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
// TODO: Dynamic check
|
// This should link to kernelx.dll!GetVersionExW.
|
||||||
#if 1
|
#pragma warning(suppress : 28159)
|
||||||
OrdinalProc1 = GetProcAddress(hinstDLL, "CreateAudioReverb");
|
if (!GetVersionExW(&OsVersion))
|
||||||
OrdinalProc2 = GetProcAddress(hinstDLL, "CreateAudioVolumeMeter");
|
return FALSE;
|
||||||
OrdinalProc3 = GetProcAddress(hinstDLL, "CreateFX");
|
|
||||||
OrdinalProc4 = GetProcAddress(hinstDLL, "CreateXAudio2Object");
|
// 6.2.10698.0 is the oldest known OS version with CreateXAudio2Object.
|
||||||
OrdinalProc5 = GetProcAddress(hinstDLL, "X3DAudioCalculate");
|
if (OsVersion.dwMajorVersion > 6 ||
|
||||||
OrdinalProc6 = GetProcAddress(hinstDLL, "X3DAudioInitialize");
|
(OsVersion.dwMajorVersion == 6 && OsVersion.dwMinorVersion > 2) ||
|
||||||
#else
|
(OsVersion.dwMajorVersion == 6 && OsVersion.dwMinorVersion == 2 && OsVersion.dwBuildNumber >= 10698))
|
||||||
OrdinalProc1 = GetProcAddress(hinstDLL, "XAudio2Create");
|
{
|
||||||
OrdinalProc2 = GetProcAddress(hinstDLL, "CreateAudioReverb");
|
OrdinalProc1 = GetProcAddress(hinstDLL, "CreateAudioReverb");
|
||||||
OrdinalProc3 = GetProcAddress(hinstDLL, "CreateAudioVolumeMeter");
|
OrdinalProc2 = GetProcAddress(hinstDLL, "CreateAudioVolumeMeter");
|
||||||
OrdinalProc4 = GetProcAddress(hinstDLL, "CreateFX");
|
OrdinalProc3 = GetProcAddress(hinstDLL, "CreateFX");
|
||||||
OrdinalProc5 = GetProcAddress(hinstDLL, "X3DAudioCalculate");
|
OrdinalProc4 = GetProcAddress(hinstDLL, "CreateXAudio2Object");
|
||||||
OrdinalProc6 = GetProcAddress(hinstDLL, "X3DAudioInitialize");
|
OrdinalProc5 = GetProcAddress(hinstDLL, "X3DAudioCalculate");
|
||||||
#endif
|
OrdinalProc6 = GetProcAddress(hinstDLL, "X3DAudioInitialize");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
OrdinalProc1 = GetProcAddress(hinstDLL, "XAudio2Create");
|
||||||
|
OrdinalProc2 = GetProcAddress(hinstDLL, "CreateAudioReverb");
|
||||||
|
OrdinalProc3 = GetProcAddress(hinstDLL, "CreateAudioVolumeMeter");
|
||||||
|
OrdinalProc4 = GetProcAddress(hinstDLL, "CreateFX");
|
||||||
|
OrdinalProc5 = GetProcAddress(hinstDLL, "X3DAudioCalculate");
|
||||||
|
OrdinalProc6 = GetProcAddress(hinstDLL, "X3DAudioInitialize");
|
||||||
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user