JNI学习-C 调用Java
来源:互联网 发布:安全联盟认证知乎 编辑:程序博客网 时间:2024/06/05 18:20
几乎是照着例子做的,遇到以下困难
1
- error LNK2001: unresolved external symbol __imp__JNI_CreateJavaVM@12
这是因为没有连接到 JVM.lib 库导致的. 一开始使用工具DEV C++,但它在windows 下无完连接.lib 库,改用VC++ 解决了问题(工程-设置-连接)。
2 JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args); 创建不了。这里和之前Java使用DLL 不同,jvm.dll 并不单放在 windows/system32 下面就可以解决,它有依赖,需设置环境变量 paht jdk1.6.0_12\jre\bin\server.
3 java类存放位置放在 options[0].optionString = "-Djava.class.path=."; 指定的地方.这里是指定为当前项目目录.
相关代码:
- #include <stdio.h>
- #include <tchar.h>
- #include <iostream>
- #include <jni.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;
- //设置Java类的路径
- options[0].optionString = "-Djava.class.path=.";
- vm_args.version = JNI_VERSION_1_6;
- vm_args.nOptions = 1;
- vm_args.options = options;
- vm_args.ignoreUnrecognized = JNI_TRUE;
- status = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
- if (status != JNI_ERR)
- {
- cls = env->FindClass("com/isw2/jni/CJava");
- if(cls !=0)
- {
- mid = env->GetStaticMethodID( cls, "add", "(II)I");
- if(mid !=0)
- {
- square = env->CallStaticIntMethod( cls, mid, 5,5);
- std::cout << square << std::endl;
- printf("square : %d",square);
- }
- }
- jvm->DestroyJavaVM();
- return 0;
- }
- else{
- return -1;}
- }
- package com.isw2.jni;
- public class CJava {
- public static String getstring(String str) {
- return str + "----String com.isw2.jni.CJava.getstring(String str) ";
- }
- public static int add(int a, int b) {
- return a + b;
- }
- }
- JNI学习-C 调用Java
- JNI学习------C语言调用Java
- JNI学习------C语言调用Java
- jni 学习笔记(java调用c++)
- Android 学习JNI,用JAVA调用C
- Java调用C JNI
- jni c调用java
- JNI java c 调用
- JNI C调用Java
- JNI学习系列——java中调用C/C++
- Java 调用C/C++ , JNI(Jave Native Interface)的学习
- JNI学习之java 调用C/C++本地库
- Android学习JNI,使用C调用JAVA语言
- JNI学习(一)(c和java层对象互相调用)
- Java JNI 调用c/cpp
- C语言调用Java JNI
- java JNI调用c程序
- JNI-->Java调用C语言
- Linux 用户态与内核态的交互 ——netlink 篇
- db2数据库存储过程入门5
- db2数据库存储过程入门6
- 腾讯QQ邮箱漏洞--修改封包欺骗邮件服务器
- XAF之Frame和Controller
- JNI学习-C 调用Java
- Xmemcached使用之与Spring整合
- 淡淡的微笑,静悄悄地过
- protobuf-net简单示例
- 第一次写博客,做好自己
- db2数据库存储过程入门7
- cerr与cout的主要区别
- db2数据库存储过程入门8
- ViewPart的主要方法执行顺序