Problem mit JNI bei Aufruf von Java Code aus C

Denan

Grünschnabel
Hallo!

Ich habe ein problem bei dem Versuch Java Code unter C über JNI auszuführen.

Es handelt sich dabei um ein Win32 DLL Projekt das ich unter Visual Studio 2008 erstellt habe.

Alle Treffer zu dem Thema habe ich bei Google bereits durch bin aber immer noch nicht weiter gekommen ausser evtl einem wagen hinweis das es mit 64 bit zusammenhängt? (http://forums.sun.com/thread.jspa?threadID=5309120)

JVM.lib habe ich in den projektkonfigurationseinstellungen unter Linker bei "zusätzliche Abhängigkeiten" wie folgt angegeben: "C:\Program Files\Java\jdk1.6.0_16\lib\jvm.lib"


Code:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <jni.h>



#ifdef _WIN32 
	#define PATH_SEPARATOR ';'
#else
	#define PATH_SEPARATOR ':'
#endif


#define dll_entry( type ) extern "C" type __stdcall


int __stdcall MultiplyTwo(int x ){
	return x*2 ;
}


int __stdcall MultiplyTwoInJava(int x ){
	JavaVMOption options[1];
	JNIEnv *env;
	JavaVM *jvm;
	JavaVMInitArgs vm_args;
	long status;
	jclass cls;
	jmethodID mid;
	jint square;
	jboolean not;

	options[0].optionString = "-Djava.class.path=.";
	memset(&vm_args, 0, sizeof(vm_args));
	vm_args.version = JNI_VERSION_1_2;
	vm_args.nOptions = 1;
	vm_args.options = options;
	status = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);

	if (status != JNI_ERR){
		cls = env->FindClass("MathTest");
		if(cls !=0){ 
			mid = env->GetStaticMethodID(cls, "multiplyTwo", "(I)I");
			if(mid !=0){ 
				square = env->CallStaticIntMethod(cls, mid, 5);
				printf("Result of java MultiplyTwo: %d\n", square);
			}

		}
		jvm->DestroyJavaVM();
		return 0;
	}
	else
	return -1;
}


Buildlog:
Code:
1>------ Erstellen gestartet: Projekt: CtoJava, Konfiguration: Debug Win32 ------
1>Kompilieren...
1>CtoJava.cpp
1>h:\dllprojekt\ctojava\ctojava\ctojava.cpp(32) : warning C4101: 'not': Unreferenzierte lokale Variable
1>Verknüpfen...
1>LINK : warning LNK4199: /DELAYLOAD:OleAcc.dll wird ignoriert; keine Importe von OleAcc.dll gefunden.
1>CtoJava.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__JNI_CreateJavaVM@12" in Funktion ""int __cdecl MultiplyTwoInJava(int)" (?MultiplyTwoInJava@@YAHH@Z)".
1>H:\dllprojekt\CtoJava\Debug\CtoJava.dll : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.
1>Das Buildprotokoll wurde unter "file://h:\dllprojekt\CtoJava\CtoJava\Debug\BuildLog.htm" gespeichert.
1>CtoJava - 2 Fehler, 2 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========



Ich hoffe mir jann jemand helfen. Ich weiss echt nicht mehr weiter :(

Gruß!

Jan
 
War ja klar das es sich erledigt kurz nachdem ich hier eine Frage stelle...

Falls noch irgendwann jemand dasselbe Problem hat:

Bei mir war das Problem das ich mit einer Java 64bit version verlinkt habe. Nach installation einer Java 32bit geht es jetzt gut. Vermutlich könnte man auch irgendwie das Projekt auf 64 bit umbasteln aber ich weiss nicht wie...
 
Zurück