diff --git a/source/backend/engine/CarlaEngineJack.cpp b/source/backend/engine/CarlaEngineJack.cpp index 2056589ab..11df98f1c 100644 --- a/source/backend/engine/CarlaEngineJack.cpp +++ b/source/backend/engine/CarlaEngineJack.cpp @@ -25,15 +25,20 @@ #include "CarlaPatchbayUtils.hpp" #include "CarlaStringList.hpp" -#include "jackbridge/JackBridge.hpp" #include "jackey.h" - #include "juce_audio_basics.h" #ifdef __SSE2_MATH__ # include #endif +// must be last +#include "jackbridge/JackBridge.hpp" + +#ifndef __cdecl +# define __cdecl +#endif + #define URI_CANVAS_ICON "http://kxstudio.sf.net/ns/canvas/icon" using juce::FloatVectorOperations; @@ -2052,7 +2057,7 @@ private: #define handlePtr ((CarlaEngineJack*)arg) - static void carla_jack_thread_init_callback(void*) + static void __cdecl carla_jack_thread_init_callback(void*) { #ifdef __SSE2_MATH__ // Set FTZ and DAZ flags @@ -2060,65 +2065,65 @@ private: #endif } - static int carla_jack_bufsize_callback(jack_nframes_t newBufferSize, void* arg) + static int __cdecl carla_jack_bufsize_callback(jack_nframes_t newBufferSize, void* arg) { handlePtr->handleJackBufferSizeCallback(newBufferSize); return 0; } - static int carla_jack_srate_callback(jack_nframes_t newSampleRate, void* arg) + static int __cdecl carla_jack_srate_callback(jack_nframes_t newSampleRate, void* arg) { handlePtr->handleJackSampleRateCallback(newSampleRate); return 0; } - static void carla_jack_freewheel_callback(int starting, void* arg) + static void __cdecl carla_jack_freewheel_callback(int starting, void* arg) { handlePtr->handleJackFreewheelCallback(bool(starting)); } - static int carla_jack_process_callback(jack_nframes_t nframes, void* arg) + static int __cdecl carla_jack_process_callback(jack_nframes_t nframes, void* arg) { handlePtr->handleJackProcessCallback(nframes); return 0; } - static void carla_jack_latency_callback(jack_latency_callback_mode_t mode, void* arg) + static void __cdecl carla_jack_latency_callback(jack_latency_callback_mode_t mode, void* arg) { handlePtr->handleJackLatencyCallback(mode); } #ifndef BUILD_BRIDGE - static void carla_jack_client_registration_callback(const char* name, int reg, void* arg) + static void __cdecl carla_jack_client_registration_callback(const char* name, int reg, void* arg) { handlePtr->handleJackClientRegistrationCallback(name, (reg != 0)); } - static void carla_jack_port_registration_callback(jack_port_id_t port, int reg, void* arg) + static void __cdecl carla_jack_port_registration_callback(jack_port_id_t port, int reg, void* arg) { handlePtr->handleJackPortRegistrationCallback(port, (reg != 0)); } - static void carla_jack_port_connect_callback(jack_port_id_t a, jack_port_id_t b, int connect, void* arg) + static void __cdecl carla_jack_port_connect_callback(jack_port_id_t a, jack_port_id_t b, int connect, void* arg) { handlePtr->handleJackPortConnectCallback(a, b, (connect != 0)); } - static int carla_jack_client_rename_callback(const char* oldName, const char* newName, void* arg) + static int __cdecl carla_jack_client_rename_callback(const char* oldName, const char* newName, void* arg) { handlePtr->handleJackClientRenameCallback(oldName, newName); return 0; } // NOTE: JACK1 returns void, JACK2 returns int - static int carla_jack_port_rename_callback(jack_port_id_t port, const char* oldName, const char* newName, void* arg) + static int __cdecl carla_jack_port_rename_callback(jack_port_id_t port, const char* oldName, const char* newName, void* arg) { handlePtr->handleJackPortRenameCallback(port, oldName, newName); return 0; } #endif - static void carla_jack_shutdown_callback(void* arg) + static void __cdecl carla_jack_shutdown_callback(void* arg) { handlePtr->handleJackShutdownCallback(); } @@ -2128,7 +2133,7 @@ private: // ------------------------------------------------------------------- #ifndef BUILD_BRIDGE - static int carla_jack_process_callback_plugin(jack_nframes_t nframes, void* arg) + static int __cdecl carla_jack_process_callback_plugin(jack_nframes_t nframes, void* arg) { CarlaPlugin* const plugin((CarlaPlugin*)arg); CARLA_SAFE_ASSERT_RETURN(plugin != nullptr && plugin->isEnabled(), 0); @@ -2147,12 +2152,12 @@ private: return 0; } - static void carla_jack_latency_callback_plugin(jack_latency_callback_mode_t /*mode*/, void* /*arg*/) + static void __cdecl carla_jack_latency_callback_plugin(jack_latency_callback_mode_t /*mode*/, void* /*arg*/) { // TODO } - static void carla_jack_shutdown_callback_plugin(void* arg) + static void __cdecl carla_jack_shutdown_callback_plugin(void* arg) { CarlaPlugin* const plugin((CarlaPlugin*)arg); CARLA_SAFE_ASSERT_RETURN(plugin != nullptr,); diff --git a/source/jackbridge/JackBridgeExport.hpp b/source/jackbridge/JackBridgeExport.hpp index 8071eae6e..60d3e572d 100644 --- a/source/jackbridge/JackBridgeExport.hpp +++ b/source/jackbridge/JackBridgeExport.hpp @@ -18,6 +18,8 @@ // ----------------------------------------------------------------------------- +extern "C" { + typedef void (__cdecl *jackbridgesym_get_version)(int* major_ptr, int* minor_ptr, int* micro_ptr, int* proto_ptr); typedef const char* (__cdecl *jackbridgesym_get_version_string)(void); typedef jack_client_t* (__cdecl *jackbridgesym_client_open)(const char* client_name, jack_options_t options, jack_status_t* status); @@ -116,6 +118,8 @@ typedef void (__cdecl *jackbridgesym_shm_attach)(void* shm, const char* name); typedef void (__cdecl *jackbridgesym_shm_close)(void* shm); typedef void* (__cdecl *jackbridgesym_shm_map)(void* shm, size_t size); +} // extern "C" + // ----------------------------------------------------------------------------- struct JackBridgeExportedFunctions { @@ -222,6 +226,10 @@ struct JackBridgeExportedFunctions { // ----------------------------------------------------------------------------- -typedef const JackBridgeExportedFunctions* (*jackbridge_exported_function_type)(); +extern "C" { + +typedef const JackBridgeExportedFunctions* (__cdecl *jackbridge_exported_function_type)(); + +} // extern "C" // -----------------------------------------------------------------------------