fix JackWeakAPI on Windows (#846)
* JackWeakAPI: fix DLL loading on Windows LoadLibrary takes a LPCWSTR (UTF16). LoadLibraryA is needed to work with ASCII C string literals. * JackWeakAPI: call tryload_libjack if it hasn't been called already On non-Windows tryload_libjack is loaded on startup with __attribute__((constructor)) but with MSVC, Microsoft documentation says to not load libraries in a DLL's initialization function: https://docs.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-best-practices * JackWeakAPI: add debugging message for Windows
This commit is contained in:
parent
84d80c0a8c
commit
cceca54255
|
@ -62,10 +62,15 @@ void tryload_libjack()
|
||||||
}
|
}
|
||||||
#elif defined(WIN32)
|
#elif defined(WIN32)
|
||||||
#ifdef _WIN64
|
#ifdef _WIN64
|
||||||
libjack_handle = LoadLibrary("libjack64.dll");
|
libjack_handle = LoadLibraryA("libjack64.dll");
|
||||||
#else
|
#else
|
||||||
libjack_handle = LoadLibrary("libjack.dll");
|
libjack_handle = LoadLibraryA("libjack.dll");
|
||||||
#endif
|
#endif
|
||||||
|
if (!libjack_handle) {
|
||||||
|
char* lpMsgBuf;
|
||||||
|
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,NULL,GetLastError(),MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),(LPTSTR) &lpMsgBuf,0,NULL );
|
||||||
|
fprintf(stderr, "Failed to load libjack DLL: %d", lpMsgBuf);
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
libjack_handle = dlopen("libjack.so.0", RTLD_LAZY);
|
libjack_handle = dlopen("libjack.so.0", RTLD_LAZY);
|
||||||
#endif
|
#endif
|
||||||
|
@ -77,8 +82,11 @@ void *load_jack_function(const char *fn_name)
|
||||||
{
|
{
|
||||||
void *fn = 0;
|
void *fn = 0;
|
||||||
if (!libjack_handle) {
|
if (!libjack_handle) {
|
||||||
fprintf (stderr, "libjack not found, so do not try to load %s ffs !\n", fn_name);
|
tryload_libjack();
|
||||||
return 0;
|
if (!libjack_handle) {
|
||||||
|
fprintf (stderr, "libjack not found, so do not try to load %s ffs !\n", fn_name);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
fn = (void*)GetProcAddress(libjack_handle, fn_name);
|
fn = (void*)GetProcAddress(libjack_handle, fn_name);
|
||||||
|
|
Loading…
Reference in New Issue