Exemplo n.º 1
0
jvalue JMethodCaller::invoke(SunJVMDLL& jvm, jobject& obj, jvalue args[])
{
  jvalue res;
  res.l = 0;

  DEBUG("invoking " + m_clazz + ": " + m_methodname + ", " + getJavaSignature());

  jclass cl = jvm.findClass(m_clazz);

  if (cl == 0)
    {
      DEBUG("Can't find class " + m_clazz + " !!");
      return res;
    }

  jmethodID m = jvm.findMethod(cl, m_methodname, getJavaSignature(), false);
  if (m == 0)
    {
      DEBUG("Can't find the method " + m_methodname + " / " + getJavaSignature());
      return res;
    }

  switch (m_returntype.TYPE)
    {
    case JVOID:
      jvm.invokeVoid(obj, m, args);
      break;
    case JBOOLEAN:
      res.z = jvm.invokeBoolean(obj, m, args);
      break;
    case JBYTE:
      res.b = jvm.invokeByte(obj, m, args);
      break;
    case JCHAR:
      res.c = jvm.invokeChar(obj, m, args);
      break;
    case JSHORT:
      res.s = jvm.invokeShort(obj, m, args);
      break;
    case JINT:
      res.i = jvm.invokeInt(obj, m, args);
      break;
    case JLONG:
      res.j = jvm.invokeLong(obj, m, args);
      break;
    case JFLOAT:
      res.f = jvm.invokeFloat(obj, m, args);
      break;
    case JDOUBLE:
      res.d = jvm.invokeDouble(obj, m, args);
      break;
    case JOBJECT:
      res.l = jvm.invokeObject(obj, m, args);
      break;
    }

  return res;
}
Exemplo n.º 2
0
/**
 * @brief toJavaSignature Convert qitype-like signature into Java-like signature.
 * @param signature qitype signature
 * @return Java signature
 */
std::string   toJavaSignature(const std::string &signature)
{
  std::vector<std::string> sigInfo = qi::signatureSplit(signature);
  std::string              sig;

  // Compute every arguments
  sig.append("(");
  getJavaSignature(sig, sigInfo[2].substr(1, sigInfo[2].size()-2));
  sig.append(")");

  // Finally add return signature (or 'V' if empty)
  if (sigInfo[0] == "")
    sig.append("V");
  else
    getJavaSignature(sig, sigInfo[0]);

  return sig;
}
Exemplo n.º 3
0
jvalue JMethodCaller::invokeStatic(SunJVMDLL& launcher, jvalue args[])
{
  jvalue res;
  jclass cl = launcher.findClass(m_clazz);

  jmethodID m = launcher.findMethod(cl, m_methodname, getJavaSignature(), true);

  DEBUG("Invoke Static " + m_methodname + " " + getJavaSignature() + " class " + m_clazz + " ");
  switch (m_returntype.TYPE)
    {
    case JVOID:
	  res.l = NULL;
	  launcher.invokeVoidStatic(cl, m, args);
      break;
    case JBOOLEAN:
      res.z = launcher.invokeBooleanStatic(cl, m, args);
      break;
    case JBYTE:
      res.b = launcher.invokeByteStatic(cl, m, args);
      break;
    case JCHAR:
      res.c = launcher.invokeCharStatic(cl, m, args);
      break;
    case JSHORT:
      res.s = launcher.invokeShortStatic(cl, m, args);
      break;
    case JINT:
      res.i = launcher.invokeIntStatic(cl, m, args);
      break;
    case JLONG:
      res.j = launcher.invokeLongStatic(cl, m, args);
      break;
    case JOBJECT:
      res.l = launcher.invokeObjectStatic(cl, m, args);
      break;
    }

  return res;
}