JNI学习-C 调用Java

参考了http://www.iteye.com/topic/460152

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

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;
	}
}
 

你可能感兴趣的:(java,C++,c,jni,C#)