2019独角兽企业重金招聘Python工程师标准>>>

在Win64下通过jni启动jvm并运行java类:

  • 环境设置:

jdk: jdk7_45(x64)

vs2010 64位命令行工具, 用来编译我们写的C++,就是这个:

环境变量设置:

  • 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 ':'
#endifint 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的库文件依赖哈):

  • 执行:

  • 还有些小事情,其实这里我们是借助vs2010命令行工具运行的exe文件,要是直接双击exe文件时运行不了的,应该是没有vs2010命令行工具的环境,等我后面再研究下,怎么自己来设置这些上下文,或者你知道,也可以告诉me,最后的效果图:
  • 收工

转载于:https://my.oschina.net/indestiny/blog/182579

Win64下通过JNI(C++)创建jvm相关推荐

  1. 使用C++创建jvm虚拟机

    JNI,全称Java Native Interface,我们一般使用它在Java中调用C++方法.实际上,如果我们愿意同样也可以在C++中调用Java方法. 这里我们使用到的技术叫做,The Invo ...

  2. 启动 Eclipse 弹出“Failed to load the JNI shared library jvm.dll”错误的解决方法!在eclipse.ini中为eclipse指定jdk启动...

    启动 Eclipse 弹出"Failed to load the JNI shared library jvm.dll"错误的解决方法! 原因1:给定目录下jvm.dll不存在. ...

  3. JNI中创建新的线程回调java方法的技巧

    在实际项目中,经常需要在Native层创建新的线程处理一些耗时操作,然后将结果回调给java层.如果按照普通的方式,直接获取MethodID,然后新线程中调用CallxxxMethod(),这样肯定是 ...

  4. Windows下在Django中创建项目时ImportError: No module named django.core解决方法

    Windows下在Django中创建项目时ImportError: No module named django.core解决方法 今天在对照<Python编程:从入门到实践>学## 标题 ...

  5. linux oracle 用户创建,LINUX下Oracle数据库用户创建方法详解

    本文实例分析了LINUX下Oracle数据库用户创建方法.分享给大家供大家参考,具体如下: 1)登录linux,以oracle用户登录(如果是root用户登录的,登录后用 su - oracle命令切 ...

  6. Windows下MongoDB安装及创建用户名和密码

    Windows下MongoDB安装及创建用户名和密码 下载MongoDB的安装文件https://www.mongodb.com/download-center#community,选择合适的版本(注 ...

  7. sybase 数据导入mysql_Windows环境下Sybase12.5 数据库创建与导入数据库.docx

    Windows环境下Sybase12.5 数据库创建与导入数据库?? 现在的情况是,Sybase数据库已经安装完成了,需重新创建一个叫ptms的数据库,指定一个用户名sybase/sybase,具备全 ...

  8. 【Android NDK 开发】JNI 线程 ( JNI 线程创建 | 线程执行函数 | 非 JNI 方法获取 JNIEnv 与 Java 对象 | 线程获取 JNIEnv | 全局变量设置 )

    文章目录 I . JNI 线程创建 II . 线程执行函数 III . 线程方法获取 Java 对象 IV . 线程方法获取 JNIEnv V . JNI 线程 完整代码示例 I . JNI 线程创建 ...

  9. Windows 7下实现×××连接自动创建

    在完成了Windows XP下×××自动创建并配置连接后,其实我们还需要对Windows 7下×××自动配置做一个介绍,因为目前实际上很多企业也已经开始进行了大批量的Windows 7的使用,而且很多 ...

  10. pycharm python 模板配置_windows下pycharm安装、创建文件、配置默认模板

    本文为大家分享了windows下pycharm安装.创建文件.配置默认模板的具体步骤,供大家参考,具体内容如下 步骤: 下包 -->安装-->创建文件-->定制模板 一.下包 官方地 ...

最新文章

  1. Expert 诊断优化系列------------------透过等待看系统
  2. MongoDB整库备份与还原以及单个collection备份、恢复方法
  3. Java 中sleep()与wait()的区别
  4. 如何给小朋友解释单摆运动_模仿小天才钟美美:小朋友都是天生的演员?
  5. java 双重检查锁定_Java双重检查锁定
  6. 计算机管理储存u盘无法使用,Win7系统退出U盘后重新插入电脑无法使用怎么办
  7. join 子查询 效率_MySQL之多表查询
  8. 一分钟了解阿里云产品:安骑士
  9. revit二次开发概念_半天入门Revit二次开发
  10. 分析服务用多维度、多场景的用户分层,带您深度玩转精细化游戏运营
  11. cdr多页面排版_cdr排版实例图文教程,教你CorelDRAW杂志内页排版方法
  12. Android studio突然报错Entry name ‘META-INF/androidx.vectordrawable_vectordrawable.version‘ collided的解决办法
  13. C语言中如何测量各种变量的长度
  14. Lenovo 使用BoMC工具制作微码升级U盘刷新System x
  15. 机器人运动学---雅克比矩阵伪逆
  16. word页脚显示不全
  17. Code for fun. Aimed nothing.
  18. BUGKU (Take the maze)
  19. 基于深度学习的x射线图像骨龄自动特征提取
  20. js整体缩小网页_js实现整体缩放页面适配移动端

热门文章

  1. Entity Framework 4.1 CodeFirst实例
  2. jBPM4.3+ssh+会签 整合配置及完整实例
  3. 在react开发过程中由于setState的异步特性,获取最新state遇到问题
  4. jQuery-EasyUI
  5. MSBuild 命令参数
  6. 字符串匹配-kmp算法
  7. Python_数据类型_字符串的操作
  8. Nios内部RAM固化配置
  9. 美化下拉框select箭头部分(不彻底)
  10. linux查文件被哪些程序占用—fuser和lsof的使用