Programmieren - alles kontrollieren 4.935 Themen, 20.621 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

Hi vergisses,
Also in der Dokumentation zum Treiber ist die Funktion wie folgt definiert: short OpenLibrary(LPSTR dllnmae, __PX_FAR *interfac, short sizeof(interface));
Ich habe die header files IFRAME.h und PXC200.h
(Die Framegrabberkarte heißt PXC200 daher der name PXC200.h!!)angeschaut und da steht die Funktion wie folgt
short OpenLibrary(char __PX_FAR *file, void __PX_FAR *iface,short count); definiert.

1. Parameter ist dll-Name also FRAME_GARBBER.DLL
2. Parameter ist void
define makro #define __PX_FAR für den Präprozessor..

Bei wrapped-Funktion brauche ich doch nicht die Parameterübergabe ich brauche lediglich den Rückgabewert!! Oder??
Also mein Funktionsaufruf würde in auf java-Seite in "Tools.java" folgendermaßen definiert: native short jOpenLibrary();

und in ToolsImlp.c wird so ausschauen:

JNIEXPORT jshort JNICALL
Java_Tools_jOpenLibrary(JNIEnv *env, jobject obj){
return (OpenLibrary(FRAME_GRABBER.DLL, &pxc, sizefo(pxc));
}
Stimmts??

Die Frage ist, was wenn die Funktion so aussieht:
FRAME __PX_FAR *AllocateBuffer(short dy, short dy, short type);

wobei FRAME eine Struktur ist und kein primitiver Datentyp und ein Zeiger auf die Funktion??

typedef struct tagFRAME{
struct tagFRAME __PX_FAR *next;
short dx,dy;
short type;
unsigned char user_type;
unsigned char dma_type;
BUFFERDATA user;
BUFFERDATA dma;
void (__PX_CALL *close)(struct tagFRAME __PX_FAR *);
}FRAME;


Gruss DeepThinking

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