Ok, ben dus een beetje aan het stoeien met JNI, nu wil ik graag vanuit een Cpp applicatie een java object aanspreken. Na veel resources nageplozen te hebben kwam ik op devworks van IBM een goed artikel tegen...
Deze heb ik gebrobeerd, maar helaas ik kom er niet uit. Compileren gaat prima, echter op het moment dat de linker er aan te pas komt gaat het fout.
Ik krijg deze melding:
Heb dus een externe functie nodig, deze zit in een dll (jvm.dll) hoe gebruik ik deze???
Voor de volledigheid hier de rest van de (cpp) code:
Deze heb ik gebrobeerd, maar helaas ik kom er niet uit. Compileren gaat prima, echter op het moment dat de linker er aan te pas komt gaat het fout.
Ik krijg deze melding:
code:
1
2
3
4
5
6
7
8
9
10
11
| --------------------Configuration: TEST101 - Win32 Debug-------------------- Compiling... StdAfx.cpp Compiling... TEST101.cpp Linking... TEST101.obj : error LNK2001: unresolved external symbol __imp__JNI_CreateJavaVM@12 Debug/TEST101.exe : fatal error LNK1120: 1 unresolved externals Error executing link.exe. TEST101.exe - 2 error(s), 0 warning(s) |
Heb dus een externe functie nodig, deze zit in een dll (jvm.dll) hoe gebruik ik deze???
Voor de volledigheid hier de rest van de (cpp) code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
| #include "stdafx.h"
#include <jni.h>
#include <memory.h>
#ifdef _WIN32
#define PATH_SEPARATOR ';'
#else
#define PATH_SEPARATOR ':'
#endif
int main()
{
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("Sample2");
if(cls !=0)
{ mid = env->GetStaticMethodID(cls, "intMethod", "(I)I");
if(mid !=0)
{ square = env->CallStaticIntMethod(cls, mid, 5);
printf("Result of intMethod: %d\n", square);
}
mid = env->GetStaticMethodID(cls, "booleanMethod", "(Z)Z");
if(mid !=0)
{ not = env->CallStaticBooleanMethod(cls, mid, 1);
printf("Result of booleanMethod: %d\n", not);
}
}
jvm->DestroyJavaVM();
return 0;
}
else
return -1;
} |
Wat niet kan is nog nooit gebeurd