mirror of
https://github.com/Rosalie241/RMG.git
synced 2026-07-11 01:24:01 +02:00
work
This commit is contained in:
Vendored
+1
-1
@@ -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 ""
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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; \
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -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());
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
Reference in New Issue
Block a user