QString ZConfDlg::GetTodoPluginDesc(QString pluginPath) { printf("Entering the GetTodoPluginDesc() function.\n"); void *libHandle; create_todo_t pCreateFunc; destroy_todo_t pDestroyFunc; TodoPluginType *pTodoPlugin; QString desc; // Open the plugin and load the creation and destroy symbols. libHandle = dlopen(pluginPath.ascii(), RTLD_LAZY); if (!libHandle) { return QString("Failed to open .so file."); } pCreateFunc = (create_todo_t)dlsym(libHandle, "createTodoPlugin"); if (!pCreateFunc) { return QString("Failed to get create symbol."); } pDestroyFunc = (destroy_todo_t)dlsym(libHandle, "destroyTodoPlugin"); if (!pDestroyFunc) { return QString("Failed to get destroy symbol."); } pTodoPlugin = pCreateFunc(); if (!pTodoPlugin) { return QString("Failed to create object."); } // At this point it should be opened. desc = QString(pTodoPlugin->GetPluginDescription()); pDestroyFunc(pTodoPlugin); dlclose(libHandle); printf("Exiting the GetTodoPluginDesc() function.\n"); return desc; }
JNIEnv* TJCreateJavaVm(const std::string& libPath, TJJNIVersion version, const TJStringArray& args) { // check if vm already exists if (sJavaVM != nullptr) return TJGetEnvironment(); #ifdef _WIN32 sVMLibrary = ::LoadLibraryA(libPath.c_str()); if (sVMLibrary == nullptr) return nullptr; // get appropriate function pointers pCreateFunc = reinterpret_cast<JNI_CreateJavaVMPtr>(::GetProcAddress(sVMLibrary, "JNI_CreateJavaVM")); if (pCreateFunc == nullptr) { ::FreeLibrary(sVMLibrary); sVMLibrary = nullptr; return nullptr; } pGetDefaultArgFunc = reinterpret_cast<JNI_GetDefaultJavaVMInitArgsPtr>(::GetProcAddress(sVMLibrary, "JNI_GetDefaultJavaVMInitArgs")); if (pGetDefaultArgFunc == nullptr) { ::FreeLibrary(sVMLibrary); sVMLibrary = nullptr; return nullptr; } sGetCreatedJavaVMsPtr = reinterpret_cast<JNI_GetCreatedJavaVMsPtr>(::GetProcAddress(sVMLibrary, "JNI_GetCreatedJavaVMs")); if (sGetCreatedJavaVMsPtr == NULL) { ::FreeLibrary(sVMLibrary); sVMLibrary = nullptr; return nullptr; } #else sVMLibrary = dlopen(libPath.c_str(), RTLD_NOW); if (sVMLibrary == NULL) return NULL; pCreateFunc = reinterpret_cast<JNI_CreateJavaVMPtr>(dlsym(sVMLibrary, "JNI_CreateJavaVM")); if (pCreateFunc == NULL) { dlclose(sVMLibrary); sVMLibrary = NULL; return NULL; } pGetDefaultArgFunc = reinterpret_cast<JNI_GetDefaultJavaVMInitArgsPtr>(dlsym(sVMLibrary, "JNI_GetDefaultJavaVMInitArgs")); if (pGetDefaultArgFunc == NULL) { dlclose(sVMLibrary); sVMLibrary = NULL; return NULL; } #endif JavaVMInitArgs vm_args = {0}; vm_args.version = static_cast<TJInt>(version); std::vector<JavaVMOption> optionsArray; if (!args.empty()) { size_t optionCount = args.size(); vm_args.nOptions = static_cast<jint>(optionCount); optionsArray.resize(optionCount); for (size_t i = 0; i < optionCount; ++i) { optionsArray[i].optionString = (char*)args[i].c_str(); optionsArray[i].extraInfo = NULL; } vm_args.options = &optionsArray[0]; vm_args.ignoreUnrecognized = JNI_TRUE; } /* Get the default initialization arguments and set the class path */ //pGetDefaultArgFunc(&vm_args); /* load and initialize a Java VM, return a JNI interface pointer in env */ JNIEnv* env = NULL; pCreateFunc(&sJavaVM, reinterpret_cast<void**>(&env), &vm_args); sCreatedVersion = version; return env; }