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:
Buildlog:
Ich hoffe mir jann jemand helfen. Ich weiss echt nicht mehr weiter
Gruß!
Jan
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