GIWS is a wrapper generator intended to simplify calling Java from C or C++ by automatically generating the necessary JNI code.

GIWS is released under the CeCILL license.

Example

edit

The following Java class does some simple computation.

package basic_example;
import java.lang.Math;

public class MyComplexClass{
	public MyComplexClass(){
		// the constructor
	}
	public long myVeryComplexComputation(double a, double b){
		return Math.round(Math.cos(a)+Math.sin(b)*9);
	}	
}

GIWS gives the capability to call it from C++.

#include <iostream>
#include "basic_example.hxx"
#include <jni.h>

JavaVM* create_vm() {
	JavaVM* jvm;
	JNIEnv* env;
	JavaVMInitArgs args;
	JavaVMOption options[2];
	args.version = JNI_VERSION_1_4;
	args.nOptions = 2;
	options[0].optionString = const_cast<char*>("-Djava.class.path=.");
	options[1].optionString = const_cast<char*>("-Xcheck:jni");
	args.options = options;
	args.ignoreUnrecognized = JNI_FALSE;
	JNI_CreateJavaVM(&jvm, (void **)&env, &args);
	return jvm;
}

using namespace basic_example;
using namespace std;

int main(){
  	JavaVM* jvm = create_vm();
	MyComplexClass *testOfMyClass = new MyComplexClass(jvm);
	cout << "My Computation: "  << testOfMyClass->myVeryComplexComputation(1.2,80) << endl;
	return 0;	
}

To generate the binding, GIWS uses a XML declaration. GIWS will generate the JNI code to call the Java object.

<package name="basic_example">
  <object name="MyComplexClass">
        <method name="myVeryComplexComputation" returnType="long">
          <param type="double" name="a" />
          <param type="double" name="b" />
        </method>
  </object>
</package>

See also

edit
  • SWIG allows one to call C or C++ from higher level languages

References

edit
edit