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
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
- SWIG allows one to call C or C++ from higher level languages
External links
    This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.