Win64下經過JNI(C++)建立jvm

在Win64下經過jni啓動jvm並運行java類: java

  • 環境設置:

       jdk: jdk7_45(x64) c++

       vs2010 64位命令行工具, 用來編譯咱們寫的C++,就是這個: 程序員

       

      環境變量設置: jvm

  • LIB變量添加「C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib\x64」, 編譯時能找到64位庫;
  • LIB變量中添加%JAVA_HOME%\lib,主要是在編譯時能找到jvm.lib庫文件;
  • PATH變量中添加%JAVA_HOME%\jre\bin\server,主要是爲了運行編譯後的exe文件能找到jvm.dll文件.
  • 碼代碼:

       java代碼(待執行): 工具

public class HelloInvocation{
	public static int add(int a, int b) {
		return a+b;
	}
}
      c++代碼:
#include <jni.h>
#include <stdlib.h>
#include <string.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 result;
	
	options[0].optionString = "-Djava.class.path=.";
	memset(&vm_args, 0, sizeof(vm_args));
	vm_args.version = JNI_VERSION_1_6;
	vm_args.nOptions = 1;
	vm_args.options = options;
	status = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);

	if (status != JNI_ERR){
		cls = env->FindClass("HelloInvocation");
		if (cls != 0){
			mid = env->GetStaticMethodID(cls, "add", "(II)I");
			if (mid != 0){
				result = env->CallStaticIntMethod(cls, mid, 4, 7);
				printf("Hi, 4 + 7 = %d\n", result);
			}
		}
		jvm->DestroyJavaVM();
		return 0;
	} else{
		return -1;
	}
}
做爲一個看到這裏的程序員,你應該很容易理解上面的代碼,我很少說;
  • 拿出你的Vs2010命令行工具, 編譯吧, 運行吧(編譯要加入咱們java jvm的庫文件依賴哈): spa

  • 執行:

      

  • 還有些小事情,其實這裏咱們是藉助vs2010命令行工具運行的exe文件,要是直接雙擊exe文件時運行不了的,應該是沒有vs2010命令行工具的環境,等我後面再研究下,怎麼本身來設置這些上下文,或者你知道,也能夠告訴me,最後的效果圖:
  • 收工
相關文章
相關標籤/搜索