Hallo zusammen. Ich habe eine Frage im Zusammenhang mit JNI, aber zuvor etwas Rahmenwissen:
Ich deklariere ein Java-Interface mit native-Methoden, was auch soweit funktioniert:
Dieses Interface lasse ich von einer Klasse implementieren und anderswo werden zB diese nativen Methoden aufgerufen. Java-seitig kompiliert es und scheint kein Problem soweit zu geben.
Wenn ich die C-Bibliothek erstelle funktioniert auch soweit alles: Via
lasse ich mir eine Headerdatei erstellen, die natürlich auf das Java-Interface verweist:
Gut, DLL wird erstellt, die Methode wird auch exportiert. Lade ich die Bibliothek doch via Java und versuche die Methode aufzurufen, kommt ein Unsatisfied Link Error:
(ich nehme an dass er mit "Prozedur" die
meint).
Ich habe JNI schon erfolgreich verwendet, es liegt nun am Sonderfall, dass die native Methode in einem Interface deklariert wird, die "ausführende" Klasse aber eine andere Java-Klasse ist und in JNI-Nomenklatur
(<-- vgl. das "impl") heißen würde.
Nun die Frage: Geht dies überhaupt, bzw. muss man hier etwas "spezielles" beachten?
Ich deklariere ein Java-Interface mit native-Methoden, was auch soweit funktioniert:
Java:
package de.abs.comm;
public interface CoreInterface
{
// ...
public native void coreCreateShell();
}
Wenn ich die C-Bibliothek erstelle funktioniert auch soweit alles: Via
Code:
javah
Code:
JNIEXPORT jboolean JNICALL Java_de_abs_comm_CoreInterface_coreCreateShell
(JNIEnv *, jobject);
Code:
java.lang.UnsatisfiedLinkError: libshelladapter.dll: Die angegebene Prozedur wurde nicht gefunden
Code:
coreCreateShell()
Ich habe JNI schon erfolgreich verwendet, es liegt nun am Sonderfall, dass die native Methode in einem Interface deklariert wird, die "ausführende" Klasse aber eine andere Java-Klasse ist und in JNI-Nomenklatur
Code:
Java_de_abs_comm_CoreInterfaceImpl_coreCreateShell()
Nun die Frage: Geht dies überhaupt, bzw. muss man hier etwas "spezielles" beachten?