Programmieren - alles kontrollieren 4.934 Themen, 20.613 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
vergisses DeepThinking „Auf existierende DLL (in C geschrieben) mittels JAVA zugreifen!“
Optionen

Du kannst im Prinzip andere DLL´s über Wrapper Funktionen in JNI indirekt aufrufen. Beispiel:
/* Java Source */
public class MyTools
{
static
{
System.loadLibrary("MyTools");
}
public native static long JGrab(long fgh, JFrame fr);
}
/* C Source */
JNIEXPORT jlong JNICALL Java_MyTools_JGrab(JNIEnv *env,jlong fgh,jclass clsFR,jobject oFr)
{
return(Grab(fgh,clsFr,oFr);
}

Evtl. mußt Du in der JNI Funktion noch ein
LoadLibrary("FRME_GRABBER") ausführen.

Mir ist allerdings nicht ganz klar, wie Du ein Java Frame, ganz gleich ob aus AWT oder Swing, unter C grabben willst.
Das Java Frame ist ein Java Objekt, dessen Beschreibung als jclass Typ übergeben wird.
Letztendlich wird das Frame über die JVM zwar als Windows Frame
realisiert, aber da müßtest Du Dich wohl durch einen ganzen
Dschungel an Implementierungsdetails kämpfen.

Es wäre warscheinlich besser, wenn Du das Frame unter Java grabben
würdest.

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