GIWS (software)

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]