java调用C++代码
一、在要使用到C++代码的类文件中声明一个native方法,例如:
public class TestNative{ public native void test(); }
二、javac编译此java文件,然后使用javah TestNative命令生成一个头文件
三、使用visual studio工具新建dll项目
然后将jdk目录下的inlcude文件夹下的jni.h和jawt.h以及include/win32文件夹下的jin_md.h和jawt_md.h文件添加在上面的dll项目中,然后将我们之前生成的TestNative.h文件中的#include<jni.h>改为#inlcude"jni.h"因为引号是在本地查找头文件,
而<>实在标准库函数中查找。
/* DO NOT EDIT THIS FILE - it is machine generated */
#include "jni.h"
/* Header for class TestNative */ #ifndef _Included_TestNative
#define _Included_TestNative
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: TestNative
* Method: test
* Signature: (LTestNative/JavaObject;)V
*/
JNIEXPORT void JNICALL Java_TestNative_test
(JNIEnv *, jobject); #ifdef __cplusplus
}
#endif
#endif
然后我们在C++中实现这个函数即可,例如:
// Dll_native.cpp: 定义 DLL 应用程序的导出函数。
// #include "stdafx.h"
#include "TestNative.h"
#include <iostream> JNIEXPORT void JNICALL Java_TestNative_test(JNIEnv *, jobject) { std::cout << "hello C++" << std::endl;
}
最后编译项目生成一个dll文件;
四、最后将生成好的dll文件放到java项目中,使用代码调用:
public class TestNative{ public native void test(); public static void main(String[] args){ System.loadLibrary("Dll_native"); TestNative tn = new TestNative();
tn.test();
} }
java调用C++代码的更多相关文章
- windows和linux环境下java调用C++代码-JNI技术
最近部门做安卓移动开发的需要调C++的代码,困难重重,最后任务交给了我,查找相关资料,没有一个教程能把不同环境(windows,linux)下怎么调用说明白的,自己在实现的过程中踩了几个坑,在这里总结 ...
- 通过JNI实现java调用C代码和C代码调用java的代码
一.java调用C代码 1)java中需要声明调用的函数,也就是native方法,并通过System.LoadLibrary来调用dll或者so(C代码).实例代码如下: public class H ...
- java调用python代码
同样的我们需要安装jython,具体的步骤如下: 1. 去 http://sourceforge.net/projects/jython/ 下载最新的jython相关的jar包. 2. 下载下来的ja ...
- JAVA调用matlab代码
做实验一直用的matlab代码,需要嵌入到java项目中,matlab代码拼拼凑凑不是很了解,投机取巧采用java调用matlab的方式解决. 1. matlab版本:matlabR2014a ...
- 01_JNI是什么,为什么使用,怎么用JNI,Cygwin环境变量配置,NDK案例(使用Java调用C代码),javah命令使用
1 什么是JNI JNI Java本地开发接口 JNI是一个协议,这个协议用来沟通java代码和外部的本地代码(C/C++) 通过这个协议,java代码就可以调用外部的C/C++代码,外部的C/C++ ...
- 使用JNA,让java调用原生代码
JNA定义: JNA:java Native Access,是SUN公司开发的基于JNI的框架.JNI使得Java可以调用原生的c或者c++代码. JNA与JNI(Java Native Interf ...
- JNI Java调用C代码 示例
Activity public class MainActivity extends ListActivity { static { System.loadLibrary(&q ...
- java调用ruby代码
问题: 最近在做一个应用的时候碰到了一个问题.客户端需要调用服务器端传回的脚本信息,然后执行.其中脚本类型包括ruby.而java中调用ruby的代码大致如下: String jrubyCode=&q ...
- 使用ecilpse(Java)调用Matlab代码
1 安装java环境: http://www.oracle.com/technetwork/java/javase/downloads/index.html 下载JDK最新版本并安装,CloudSim ...
随机推荐
- .net core webapi 定义多版本与 Swagger 的文档输出
前提: 需要nuget 以下两个程序集 Swashbuckle.AspNetCore 我暂时用的是 4.01: Microsoft.AspNetCore.Mvc.Versioning.ApiExp ...
- 解决“找不到请求的 .Net Framework Data Provider。可能没有安装.”错误
问题: 这几天在装.NET 的开发环境,在装好VS2013和Oracle 11g之后,做了一个测试项目,运行调试没问题 但是涉及到数据库相关操作,如新建数据集.连接数据库等在调试的时候则会出现如下错误 ...
- Cesium Language (CZML) 入门1 — CZML Structure(CZML的结构)
原文:https://github.com/AnalyticalGraphicsInc/cesium/wiki/CZML-Structure CZML是一种用来描述动态场景的JSON架构的语言,主要用 ...
- 4-C#格式处理
本篇博客对应视频讲解 前言 前几篇文章及对应视频是带大家快速体验了一下C#,了解编程语言最基础的内容及面向对象的概念. 接下来我会进一步演示和说明C#还能做些什么. 实际上,C#就一门语言来讲,除去面 ...
- 【文文殿下】后缀自动机(Suffix Automaton,SAM)学习笔记
前言 后缀自动机是一个强大的数据结构,能够解决很多字符串相关的(String-related)问题. 例如:他可以查询一个字符串在另一个字符串中出现的所有子串,以及查询一个字符串中本质不同的字符串的个 ...
- [CSS3] 3D桃心
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 确定 RN 中方法的 queue
 如果不指定,每一个模块,都会生成自己的一个串行队列. 可以通过强行声明一个队列来指定所有方法都在这个队列执行 - (dispatch_queue_t)methodQueue { return di ...
- Eclipse署动态web项目方法
和MyEclipse不一样,在Eclipse中做的Web项目默认是不支持将项目发布到Web服务器上的,会发布到工作空间的某个目录,因此无法在外部启动Tomcat来运行Web项目,只有打开Eclipse ...
- 关于Mysql数据库查询数据大小写的问题汇总
前天在问答区看到一个童鞋对于mysql中大小写问题不熟悉,在回复他后再次汇总梳理如下: mysql中大小写问题主要有以下两种: A.表名区分大小写 ower_case_table_names 是表名区 ...
- 架构师养成记--26.vi/vim相关操作
vi/vim命令模式插入模式 aio编辑模式 : aio就是vi/vim的插入模式命令 作用a 在光标后附加文本A 在本行末附加文本i 在光标钱插 ...