This commit is contained in:
Rosalie Wanders
2020-10-08 11:45:16 +02:00
parent f2c127d208
commit 119bf2ef95
8 changed files with 91 additions and 22 deletions
+1 -1
View File
@@ -104,7 +104,7 @@ ExternalProject_Add(mupen64plus-video-GLideN64
SOURCE_DIR mupen64plus-video-GLideN64
GIT_REPOSITORY https://github.com/gonetz/GLideN64
GIT_TAG 00dac336f897828b542e66aca74f6755d689e195
GIT_TAG b200b33b849f38182b7d0b7371df064eb8864bf5
INSTALL_COMMAND ""
+10
View File
@@ -36,6 +36,16 @@ set(RMG_SOURCES
main.cpp
)
if (WIN32 OR MSYS)
list(APPEND RMG_SOURCES
M64P/dynlib_win32.cpp
)
else()
list(APPEND RMG_SOURCES
M64P/dynlib_unix.cpp
)
endif()
if (CMAKE_BUILD_TYPE MATCHES Release)
add_executable(RMG WIN32 ${RMG_SOURCES})
else()
+4 -16
View File
@@ -10,28 +10,16 @@
#ifndef M64P_MACROS_HPP
#define M64P_MACROS_HPP
#ifdef _WIN32
#include <windows.h>
#define DLOPEN(lib) LoadLibrary(lib)
#define DLCLOSE(lib) FreeLibrary(lib)
#define DLSYM(lib, func) GetProcAddress(lib, func)
#define DLGETERRSTR() GetLastError()
#else
#include <dlfcn.h>
#define DLOPEN(lib) dlopen(lib, RTLD_LAZY)
#define DLCLOSE(lib) dlclose(lib)
#define DLSYM(lib, func) dlsym(lib, func)
#define DLGETERRSTR() dlerror()
#endif
#include "dynlib.hpp"
#define HOOK_FUNC_OPT(handle, prevar, var) \
this->var = (ptr_##prevar##var)DLSYM(handle, #prevar#var);
this->var = (ptr_##prevar##var)dynlib_sym(handle, #prevar#var);
#define HOOK_FUNC(handle, prevar, var) \
this->var = (ptr_##prevar##var)DLSYM(handle, #prevar#var); \
this->var = (ptr_##prevar##var)dynlib_sym(handle, #prevar#var); \
if (this->var == nullptr) \
{ \
this->error_Message += DLGETERRSTR(); \
this->error_Message += dynlib_strerror(); \
return false; \
}
+3 -3
View File
@@ -70,10 +70,10 @@ bool Api::core_Handle_Open(QString file)
{
this->core_Handle_Close();
this->core_Handle = DLOPEN(file.toStdString().c_str());
this->core_Handle = dynlib_open((char*)file.toStdString().c_str());
if (this->core_Handle == NULL)
{
this->error_Message += DLGETERRSTR();
this->error_Message += dynlib_strerror();
return false;
}
@@ -87,7 +87,7 @@ void Api::core_Handle_Close(void)
if (!this->core_Handle_Opened)
return;
DLCLOSE(this->core_Handle);
dynlib_close(this->core_Handle);
this->core_Handle_Opened = false;
}
+2 -2
View File
@@ -27,13 +27,13 @@ bool Plugin::Init(QString file, m64p_dynlib_handle coreHandle)
m64p_error ret;
this->fileName = file;
this->handle = DLOPEN(file.toStdString().c_str());
this->handle = dynlib_open((char*)file.toStdString().c_str());
this->error_Message = "Plugin::Init Failed: ";
if (this->handle == NULL)
{
this->error_Message += DLGETERRSTR();
this->error_Message += dynlib_strerror();
return false;
}
+17
View File
@@ -0,0 +1,17 @@
#ifndef DYNLIB_HPP
#define DYNLIB_HPP
#ifdef _WIN32
#include <windows.h>
HMODULE dynlib_open(char *);
void dynlib_close(HMODULE);
FARPROC dynlib_sym(HMODULE, char *);
#else
void *dynlib_open(const char *);
void dynlib_close(void *);
void *dynlib_sym(void *, const char *);
#endif // _WIN32
QString dynlib_strerror(void);
#endif // DYNLIB_HPP
+22
View File
@@ -0,0 +1,22 @@
#include "dynlib.hpp"
#include <dlfcn.h>
void *dynlib_open(const char * file)
{
return dlopen(file, RTLD_LAZY);
}
void dynlib_close(void * dynlib)
{
dlclose(dynlib);
}
void *dynlib_sym(void* dynlib, const char * sym)
{
return dlsym(dynlib, sym);
}
QString dynlib_strerror(void)
{
return QString::fromStdString(dlerror());
}
+32
View File
@@ -0,0 +1,32 @@
#include "dynlib.hpp"
#include <windows.h>
HMODULE dynlib_open(char *file)
{
return LoadLibrary(file)
}
void dynlib_close(HMODULE dynlib)
{
FreeLibrary(dynlib);
}
void *dynlib_sym(HMODULE dynlib, char *sym)
{
return GetProcAddress(dynlib, sym);
}
QString dynlib_strerror(void)
{
DWORD err = GetLastError();
LPSTR buf = nullptr;
size_t size = FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&buf, 0, NULL);
std::string msg(buf, size);
LocalFree(buf);
return QString::fromStdString(msg);
}