Trzeba będzie użyć Java Native Interface (JNI), która jest zbiorem C/C++ funkcji, które umożliwiają natywny kod do współpracy z kodu Java (tj otrzymaniu parametrów z wywołań funkcji java, zwracania wyników, itp). Napisz opakowującą bibliotekę C, która odbiera połączenia JNI, a następnie wywołaj bibliotekę zewnętrzną.
Na przykład poniższa funkcja wywołuje metodę updateHandlers
na obiekcie natywnym (przechowywanym jako długo po stronie Java).
class MyImpl {
void updateHandlers(JNIEnv *env) {
this->contentHandler = ....;
}
}
JNIEXPORT void JNICALL Java_package_Classname_updateHandlers0
(JNIEnv *env, jobject obj, jlong ptr)
{
((MyImpl*)ptr)->updateHandlers(env);
}
Odpowiednie deklaracje w package.ClassName są:
private long ptr; //assigned from JNI
public void updateHandlers() {
if (ptr==0) throw new NullPointerException();
updateHandlers0(ptr);
}
private native void updateHandlers0(long ptr);
static {
try {
/*try preloading the library external.dll*/
System.loadLibrary("external");
} catch (UnsatisfiedLinkError e) {
/*library will be resolved when loading myjni*/
}
System.loadLibrary("myjni"); //load myjni.dll
}
"To nie działa dla mnie" nie jest * prawie * wystarczającą informacją, abyśmy mogli Ci pomóc. Musisz nam powiedzieć, co próbujesz i jakie były wyniki. Proszę przeczytać http://tinyurl.com/so-list –
Co nie działa?Czy możesz udostępnić kod tego, co próbujesz? –
Dla systemu Linux: http://stackoverflow.com/a/30635871/895245 –