#if defined(_MSC_VER) /* Windows */ #include static HMODULE oalModule = NULL; #else /* Hack for Linux */ #define __USE_GNU #include #endif /* Java->C glue code: * Java package: net.java.games.joal.impl.ALImpl * Java method: long dynamicLookupFunction0(java.lang.String fname) * C function: ALproc alGetProcAddress(const ALchar * fname); */ JNIEXPORT jlong JNICALL Java_net_java_games_joal_impl_ALImpl_dynamicLookupFunction0__Ljava_lang_String_2(JNIEnv *env, jobject _unused, jstring fname) { const char* _UTF8fname = NULL; ALproc _res; if (fname != NULL) { if (fname != NULL) { _UTF8fname = (*env)->GetStringUTFChars(env, fname, (jboolean*)NULL); if (_UTF8fname == NULL) { (*env)->ThrowNew(env, (*env)->FindClass(env, "java/lang/OutOfMemoryError"), "Failed to get UTF-8 chars for argument \"fname\" in native dispatcher for \"alGetProcAddress\""); return 0; } } } #if defined(_MSC_VER) /* Windows */ if (oalModule == NULL) { oalModule = GetModuleHandle("OpenAL32"); } _res = (ALproc) GetProcAddress(oalModule, _UTF8fname); /* Looks like we can use dlsym on OS X as well as other Unix flavors */ /* #elif defined(__APPLE__) && defined(__MACH__) */ /* OS X */ #else /* Assume vanilla Unix */ _res = (ALproc) dlsym(RTLD_DEFAULT, _UTF8fname); #endif if (fname != NULL) { (*env)->ReleaseStringUTFChars(env, fname, _UTF8fname); } return (jlong) (intptr_t) _res; }