Example #1
0
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;
}
Example #2
0
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;
}