From 6eaa799c20e2bf2eb1ff9b90d482ab993476b0e7 Mon Sep 17 00:00:00 2001 From: onyx-and-iris Date: Fri, 20 Mar 2026 03:27:24 +0000 Subject: [PATCH] the platform check is mostly redundant because `import winreg` will have already failed on most python installations swith to ct.WinDLL which is intended for C APIs using stdcall convention. --- voicemeeterlib/inst.py | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/voicemeeterlib/inst.py b/voicemeeterlib/inst.py index 3e426c1..41ae0a3 100644 --- a/voicemeeterlib/inst.py +++ b/voicemeeterlib/inst.py @@ -1,15 +1,22 @@ import ctypes as ct import platform -import winreg from pathlib import Path -from .error import InstallError +from .error import InstallError, VMError + +try: + import winreg +except ImportError as e: + ERR_MSG = 'winreg module not found, only Windows OS supported' + raise VMError(ERR_MSG) from e + +# Defense against edge cases where winreg imports but we're not on Windows +if platform.system() != 'Windows': + ERR_MSG = f'Unsupported OS: {platform.system()}, only Windows OS supported' + raise VMError(ERR_MSG) BITS = 64 if ct.sizeof(ct.c_void_p) == 8 else 32 -if platform.system() != 'Windows': - raise InstallError('Only Windows OS supported') - VM_KEY = 'VB:Voicemeeter {17359A74-1236-5467}' REG_KEY = '\\'.join( @@ -37,12 +44,14 @@ def get_vmpath(): try: vm_parent = Path(get_vmpath()).parent except FileNotFoundError as e: - raise InstallError('Unable to fetch DLL path from the registry') from e + ERR_MSG = 'Unable to fetch DLL path from the registry' + raise InstallError(ERR_MSG) from e DLL_NAME = f'VoicemeeterRemote{"64" if BITS == 64 else ""}.dll' dll_path = vm_parent.joinpath(DLL_NAME) if not dll_path.is_file(): - raise InstallError(f'Could not find {dll_path}') + ERR_MSG = f'Could not find {dll_path}' + raise InstallError(ERR_MSG) -libc = ct.CDLL(str(dll_path)) +libc = ct.WinDLL(str(dll_path))