diff options
-rw-r--r-- | router/router.cpp | 9 | ||||
-rw-r--r-- | router/router.h | 14 |
2 files changed, 13 insertions, 10 deletions
diff --git a/router/router.cpp b/router/router.cpp index 049ac3bc..66bf5dd3 100644 --- a/router/router.cpp +++ b/router/router.cpp @@ -63,11 +63,6 @@ BOOL APIENTRY DllMain(HINSTANCE UNUSED(module), DWORD reason, void* UNUSED(reser break; case DLL_PROCESS_DETACH: - for(auto &drv : DriverList) - { - if(drv.Module) - FreeLibrary(drv.Module); - } DriverList.clear(); if(LogFile && LogFile != stderr) @@ -98,7 +93,7 @@ static void AddModule(HMODULE module, const WCHAR *name) } } - DriverList.emplace_back(); + DriverList.emplace_back(name, module); DriverIface &newdrv = DriverList.back(); /* Load required functions. */ @@ -209,8 +204,6 @@ static void AddModule(HMODULE module, const WCHAR *name) if(!err) { ALCint alc_ver[2] = { 0, 0 }; - newdrv.Name = name; - newdrv.Module = module; newdrv.alcGetIntegerv(nullptr, ALC_MAJOR_VERSION, 1, &alc_ver[0]); newdrv.alcGetIntegerv(nullptr, ALC_MINOR_VERSION, 1, &alc_ver[1]); if(newdrv.alcGetError(nullptr) == ALC_NO_ERROR) diff --git a/router/router.h b/router/router.h index 41060ecd..d2574e74 100644 --- a/router/router.h +++ b/router/router.h @@ -31,7 +31,7 @@ #define MAKE_ALC_VER(major, minor) (((major)<<8) | (minor)) -typedef struct DriverIface { +struct DriverIface { std::wstring Name; HMODULE Module{nullptr}; int ALCVer{0}; @@ -133,7 +133,17 @@ typedef struct DriverIface { LPALDOPPLERVELOCITY alDopplerVelocity{nullptr}; LPALSPEEDOFSOUND alSpeedOfSound{nullptr}; LPALDISTANCEMODEL alDistanceModel{nullptr}; -} DriverIface; + + DriverIface(std::wstring name, HMODULE mod) + : Name(std::move(name)), Module(mod) + { } + ~DriverIface() + { + if(Module) + FreeLibrary(Module); + Module = nullptr; + } +}; extern std::vector<DriverIface> DriverList; |