Programmieren - alles kontrollieren 4.935 Themen, 20.616 Beiträge

Auf existierende DLL (in C geschrieben) mittels JAVA zugreifen!

DeepThinking / 17 Antworten / Flachansicht Nickles

Hallo, ich möchte auf eine in C geschriebene DLL mittles Java zugreifen. Also die DLL ist -wie gesagt - schon vorhanden; ich will lediglich sie in meinem Java-Programm einbinden, damit ich bestimmte Funktionen aufrufen kann. Ich habe Java Native Interface angeschaut und kann eigene DLL erstellen, die ich dann in Java-Programmen einbinden kann(mit System.loadLibrary). Aber was ist, wenn die DLL schon existiert!?


Konkret: ich habe FRME_GRABBER.DLL (in C geschrieben) und will sie im JAVA-Programm benutzen. z.B. möchte die Funktion long Grab(long fgh, FRAME *frh), was schon in dieser FRAME_GRABBER.DLL implementiert ist, in meinem JAVA-Programm benutzen.

bei Antwort benachrichtigen
DeepThinking vergisses „Danke! Ich versuche es über Wrapper Funktionen..“
Optionen

Danke Dir vergisses!
Nur das Problem ich komme aus der C seite und versuche die Funktionen in java zu nutzen!
Nun ganz konkret: Ich habe die Funktion
short OpenLibrary(LPSTR dllname, __PC_FRAME *interface, short sizeof(interface))
und sie ist in FRAME_GRABBER.DLL implementiert.
Der Tipp war, dass man mit Wrapper Funktionen arbeitet. D.h. ich definiere im Java-Code "Tools.java" die native Funktion
native short jOpenLibrary(string dllName, ??, ??)

Kompiliere javac Tools.java
dann javah -jni Tools
bekomme Tools.h
mit der Native Funktion
JNIEXPORT jshort JNICALL Java_Tools_jOpenLibrary(JNIEnv *, jobject, jstring, ??, ??);

Und in C code "ToolsImpl.c" rufe die ursprügliche Funktion auf!!

JNIEXPORT jshort JNICALL
Java_Tools_jOpenLibrary(JNIEnv *env, jobject obj, jstring dllname, ??, ??){
return(OpenLibrary("FRAME_GRABBER.DLL", &interface, sizeof(interface));
}

daraus mache ich meine MY_FRAME_GRABBER.DLL..

//Die Frage ist,wie soll die native methode in meinem java-Code aussiehen??
//Die Parameterübergabe in der Native Funktion
native short jOpenLibrary(string dllName, ??, ??)

Entschuldige für die vielen Fragen!
Aber das bereitet mir wirklich Kopfschmerzen, besonderes wenn man unter Zeitdruck steht.

Gruss DeepThinking..

bei Antwort benachrichtigen
Danke viel mals! DeepThinking
Danke viel mals! vergisses