1
0
mirror of synced 2025-02-08 15:08:11 +01:00

fix: Plugins not having a proper entry point on MSVC

This commit is contained in:
WerWolv 2025-02-01 19:14:15 +01:00
parent e9bf1a9f7a
commit 327a02b87d

View File

@ -13,6 +13,13 @@
#include <wolv/utils/preproc.hpp> #include <wolv/utils/preproc.hpp>
#include <wolv/utils/guards.hpp> #include <wolv/utils/guards.hpp>
#if defined(_MSC_VER)
#include <windows.h>
#define PLUGIN_ENTRY_POINT extern "C" BOOL WINAPI DllMain(HINSTANCE hInstDll, DWORD fwdReason, LPVOID lpReserved) { return TRUE; }
#else
#define PLUGIN_ENTRY_POINT
#endif
namespace { namespace {
struct PluginFunctionHelperInstantiation {}; struct PluginFunctionHelperInstantiation {};
} }
@ -45,7 +52,11 @@ void* PluginSubCommandsFunctionHelper<T>::getSubCommands() {
#if defined (IMHEX_STATIC_LINK_PLUGINS) #if defined (IMHEX_STATIC_LINK_PLUGINS)
#define IMHEX_PLUGIN_VISIBILITY_PREFIX static #define IMHEX_PLUGIN_VISIBILITY_PREFIX static
#else #else
#define IMHEX_PLUGIN_VISIBILITY_PREFIX extern "C" [[gnu::visibility("default")]] #if defined(_MSC_VER)
#define IMHEX_PLUGIN_VISIBILITY_PREFIX extern "C" __declspec(dllexport)
#else
#define IMHEX_PLUGIN_VISIBILITY_PREFIX extern "C" [[gnu::visibility("default")]]
#endif
#endif #endif
#define IMHEX_FEATURE_ENABLED(feature) WOLV_TOKEN_CONCAT(WOLV_TOKEN_CONCAT(WOLV_TOKEN_CONCAT(IMHEX_PLUGIN_, IMHEX_PLUGIN_NAME), _FEATURE_), feature) #define IMHEX_FEATURE_ENABLED(feature) WOLV_TOKEN_CONCAT(WOLV_TOKEN_CONCAT(WOLV_TOKEN_CONCAT(IMHEX_PLUGIN_, IMHEX_PLUGIN_NAME), _FEATURE_), feature)
@ -77,7 +88,7 @@ void* PluginSubCommandsFunctionHelper<T>::getSubCommands() {
ImGui::SetCurrentContext(ctx); \ ImGui::SetCurrentContext(ctx); \
GImGui = ctx; \ GImGui = ctx; \
} \ } \
extern "C" [[gnu::visibility("default")]] void WOLV_TOKEN_CONCAT(forceLinkPlugin_, IMHEX_PLUGIN_NAME)() { \ IMHEX_PLUGIN_VISIBILITY_PREFIX void WOLV_TOKEN_CONCAT(forceLinkPlugin_, IMHEX_PLUGIN_NAME)() { \
hex::PluginManager::addPlugin(name, hex::PluginFunctions { \ hex::PluginManager::addPlugin(name, hex::PluginFunctions { \
nullptr, \ nullptr, \
WOLV_TOKEN_CONCAT(initializeLibrary_, IMHEX_PLUGIN_NAME), \ WOLV_TOKEN_CONCAT(initializeLibrary_, IMHEX_PLUGIN_NAME), \
@ -92,6 +103,7 @@ void* PluginSubCommandsFunctionHelper<T>::getSubCommands() {
nullptr \ nullptr \
}); \ }); \
} \ } \
PLUGIN_ENTRY_POINT \
IMHEX_PLUGIN_VISIBILITY_PREFIX void WOLV_TOKEN_CONCAT(initializeLibrary_, IMHEX_PLUGIN_NAME)() IMHEX_PLUGIN_VISIBILITY_PREFIX void WOLV_TOKEN_CONCAT(initializeLibrary_, IMHEX_PLUGIN_NAME)()
#define IMHEX_PLUGIN_SETUP_IMPL(name, author, description) \ #define IMHEX_PLUGIN_SETUP_IMPL(name, author, description) \
@ -112,7 +124,7 @@ void* PluginSubCommandsFunctionHelper<T>::getSubCommands() {
return PluginSubCommandsFunctionHelper<PluginFunctionHelperInstantiation>::getSubCommands(); \ return PluginSubCommandsFunctionHelper<PluginFunctionHelperInstantiation>::getSubCommands(); \
} \ } \
IMHEX_PLUGIN_VISIBILITY_PREFIX void initializePlugin(); \ IMHEX_PLUGIN_VISIBILITY_PREFIX void initializePlugin(); \
extern "C" [[gnu::visibility("default")]] void WOLV_TOKEN_CONCAT(forceLinkPlugin_, IMHEX_PLUGIN_NAME)() { \ IMHEX_PLUGIN_VISIBILITY_PREFIX void WOLV_TOKEN_CONCAT(forceLinkPlugin_, IMHEX_PLUGIN_NAME)() { \
hex::PluginManager::addPlugin(name, hex::PluginFunctions { \ hex::PluginManager::addPlugin(name, hex::PluginFunctions { \
initializePlugin, \ initializePlugin, \
nullptr, \ nullptr, \
@ -127,6 +139,7 @@ void* PluginSubCommandsFunctionHelper<T>::getSubCommands() {
getFeatures \ getFeatures \
}); \ }); \
} \ } \
PLUGIN_ENTRY_POINT \
IMHEX_PLUGIN_VISIBILITY_PREFIX void initializePlugin() IMHEX_PLUGIN_VISIBILITY_PREFIX void initializePlugin()
/** /**