JNI学习-C 调用Java

来源:互联网 发布:安全联盟认证知乎 编辑:程序博客网 时间:2024/06/05 18:20

几乎是照着例子做的,遇到以下困难

1

Xml代码  收藏代码
  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=.";  指定的地方.这里是指定为当前项目目录.

 

相关代码:

Cpp代码  收藏代码
  1. #include <stdio.h>  
  2. #include <tchar.h>  
  3. #include <iostream>  
  4. #include <jni.h>  
  5.   
  6. #ifdef _WIN32  
  7. #define PATH_SEPARATOR ';'  
  8. #else  
  9. #define PATH_SEPARATOR ':'  
  10. #endif  
  11.   
  12. int main()  
  13. {  
  14.     JavaVMOption options[1];  
  15.     JNIEnv *env;  
  16.     JavaVM *jvm;  
  17.     JavaVMInitArgs vm_args;  
  18.     long status;  
  19.     jclass cls;  
  20.     jmethodID mid;  
  21.     jint square;  
  22.     //设置Java类的路径  
  23.     options[0].optionString = "-Djava.class.path=.";  
  24.     vm_args.version = JNI_VERSION_1_6;  
  25.     vm_args.nOptions = 1;  
  26.     vm_args.options = options;  
  27.     vm_args.ignoreUnrecognized = JNI_TRUE;  
  28.     status = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);  
  29.     if (status != JNI_ERR)  
  30.     {  
  31.         cls = env->FindClass("com/isw2/jni/CJava");  
  32.         if(cls !=0)  
  33.         {   
  34.             mid = env->GetStaticMethodID( cls, "add""(II)I");  
  35.             if(mid !=0)  
  36.             {    
  37.                 square = env->CallStaticIntMethod( cls, mid, 5,5);  
  38.                 std::cout << square << std::endl;  
  39.                 printf("square : %d",square);  
  40.             }  
  41.         }  
  42.         jvm->DestroyJavaVM();  
  43.         return 0;  
  44.     }  
  45.     else{  
  46.         return -1;}  
  47. }  
 
Java代码  收藏代码
  1. package com.isw2.jni;  
  2.   
  3. public class CJava {  
  4.     public static String getstring(String str) {  
  5.         return str + "----String com.isw2.jni.CJava.getstring(String str) ";  
  6.     }  
  7.   
  8.     public static int add(int a, int b) {  
  9.         return a + b;  
  10.     }  
  11. }