Monday, March 23, 2009

Detour

There is very little tool support for C++ calls into a Java app. So I had to write a tool to generate c++ implementations, as opposed to just declarations in header files. It's an Ant task, javacpp, not a stand-alone tool, and it takes Java declarations like this:

public native void setUpperDeck(UpperDeck theUpperDeck);

public void addPropertyChangeListener(final java.beans.PropertyChangeListener listener) {
_propertyChangeSupport.addPropertyChangeListener(listener);
}

And generates c++ code like this:

JNIEXPORT void JNICALL Java_com_hymerfania_mandelbrotbridge_UpperDeck_setUpperDeck(JNIEnv *javaEnv, jobject javaObject, jobject somejobject){
jclass thisJavaClazz = javaEnv->GetObjectClass(javaObject);
jmethodID mid = javaEnv->GetMethodID(thisJavaClazz,"setUpperDeck","(Lcom/hymerfania/mandelbrotbridge/UpperDeck;)V");
/* insert your code here */
}

JNIEXPORT void JNICALL Java_com_hymerfania_mandelbrotbridge_UpperDeck_addPropertyChangeListener(JNIEnv *javaEnv, jobject javaObject, jobject somejobject){
jclass thisJavaClazz = javaEnv->GetObjectClass(javaObject);
jmethodID mid = javaEnv->GetMethodID(thisJavaClazz,"addPropertyChangeListener","(Ljava/beans/PropertyChangeListener;)V");
javaEnv->CallVoidMethod(javaObject, mid, somejobject);
}

No comments:

Post a Comment