From 775dc8a9c0c83f7a2f776e97f5b90385c759535a Mon Sep 17 00:00:00 2001 From: hrydgard Date: Sat, 12 Jul 2008 17:40:22 +0000 Subject: Initial megacommit. git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@4 8ced0084-cf51-0410-be5f-012b33b47a6e --- Source/Core/Common/Src/DynamicLibrary.cpp | 109 ++++++++++++++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 Source/Core/Common/Src/DynamicLibrary.cpp (limited to 'Source/Core/Common/Src/DynamicLibrary.cpp') diff --git a/Source/Core/Common/Src/DynamicLibrary.cpp b/Source/Core/Common/Src/DynamicLibrary.cpp new file mode 100644 index 0000000000..86f5640a59 --- /dev/null +++ b/Source/Core/Common/Src/DynamicLibrary.cpp @@ -0,0 +1,109 @@ +// Copyright (C) 2003-2008 Dolphin Project. + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#include +#ifdef _WIN32 +#include +#else +#include +#include +#endif + +#include "Common.h" +#include "DynamicLibrary.h" + +DynamicLibrary::DynamicLibrary() +{ + library = 0; +} + + +bool DynamicLibrary::Load(const char* filename) +{ + if (strlen(filename) == 0) + { + PanicAlert("DynamicLibrary : Missing filename"); + return(false); + } + + if (IsLoaded()) + { + PanicAlert("Trying to load already loaded library %s", filename); + return(false); + } + +#ifdef _WIN32 + library = LoadLibrary(filename); +#else + library = dlopen(filename, RTLD_NOW | RTLD_LOCAL); + + if (!library) + { + PanicAlert(dlerror()); + } + else + { + printf("Successfully loaded %s", filename); + } +#endif + + return(library != 0); +} + + +void DynamicLibrary::Unload() +{ + if (!IsLoaded()) + { + PanicAlert("Trying to unload non-loaded library"); + return; + } + +#ifdef _WIN32 + FreeLibrary(library); +#else + dlclose(library); +#endif + library = 0; +} + + +void* DynamicLibrary::Get(const char* funcname) const +{ + void* retval; +#ifdef _WIN32 + retval = GetProcAddress(library, funcname); + + if (!retval) + { + // PanicAlert("Did not find function %s in DLL", funcname); + } + + return(retval); + +#else + retval = dlsym(library, funcname); + + if (!retval) + { + printf("%s\n", dlerror()); + } +#endif + +} + + -- cgit v1.2.3