Java调用C++程序
来源:互联网 发布:百度域名劫持事件 编辑:程序博客网 时间:2024/06/08 18:27
一 、获取C++程序(dll文件)
要想调用C++ 程序,首先你得有一个C++程序吧,一般都是调用C++程序员给我们提供的 xxx.dll 文件。 然而 我是一个Java 程序员, 没做过什么C++ 开发。
在这里给大家找了个例子,
//这是 一个 C++ 程序,最后会生成 NativeCode.dll#include<iostream.h> #include"com_test_TestNative.h"//这里有一个名为sayHello的方法 JNIEXPORT void JNICALL Java_com_test_TestNative_sayHello(JNIEnv *env, jobject obj) { cout<<"hello world!"<<endl; }
二 、把dll文件放入环境变量中
我的 JAVA_HOME 是 : D:\Program Files (x86)\jdk1.7_32\Java\jdk1.7.0_79
我们需要把dll 文件放入 bin 目录下
D:\Program Files (x86)\jdk1.7_32\Java\jdk1.7.0_79\bin
三、编写测试程序
package com.test;class Person{ String name; int age; /* typedef struct _Person{ char name[32]; int age; }Person; */}public class TestNative {//这里 有一个 名为 sayHello 的方法 ,// 注意方法名必须要和C++ 里 .dll 方法名相同 public native void sayHello(); static { System.loadLibrary("NativeCode");//载入本地库 } /** * @param args */ public static void main(String[] args) { //加载库 ,也可以写在静态代码块里 // System.loadLibrary("NativeCode"); TestNative tNative = new TestNative(); // Person p = new Person(); // p.name = "张三"; //tNative.sayHello(p) tNative.sayHello(); }}补充一下:如果tNative.sayHello()是一个有参方法,且参数是 NativeCode.dll 里定义的结构体。C++里的结构体对应java对象,我们只需要在java类中创建一个名称相同的class 就可以啦,属性名也必须相同,需要注意的 是 C++ 里没有String 类型。字符数组对应Java里的Stringclass Person{ String name; int age; /* typedef struct _Person{ char name[32]; int age; }Person; */}
总结 :
1、native 修饰符 native修饰符详情
“A native method is a Java method whose implementation is provided by non-java code.”
在定义一个native method时,并不提供实现体(有些像定义一个java interface),因为其实现体是由非java语言在外面实现的。我们可以理解为 通过 System.loadLibrary 加载库 后, 相同的方法名 会互相关联。
参考文章:http://www.cnblogs.com/liuling/p/2013-12-20.html
阅读全文
1 0
- java调用c程序
- java JNI调用c程序
- Java 调用c/c++程序
- Java 调用C语言程序
- java通过jni调用C程序
- java使用jacob调用c#.net程序
- 从 C/C++ 程序调用 Java 代码
- Java 调用 C程序 之HelloWorld
- 从 Java 程序调用 C/C++ 代码
- 从 C/C++ 程序调用 Java 代码 .
- 从 C/C++ 程序调用 Java 代码
- jni实现C语言调用Java程序
- 在 C/C++ 程序调用 Java 代码
- 从 C/C++ 程序调用 Java 代码
- 使用C程序调用Java类方法
- Java调用c/c++程序时报错
- 从 C/C++ 程序调用 Java 代码
- Java JNI调用c/c++程序
- C#简单数据类型
- Monkey环境搭建
- linu挂载新磁盘
- 单据缩写+日期+固定长度流水号函数
- web测试方法总结
- Java调用C++程序
- LAMP安装(五) 安装php的扩展 (以memcache为例)
- 半小时搭建 Ubuntu16.04 + CUDA8.0 + CUDNN5.0 + Caffe 环境
- Set List 直接转String[]数组
- Android开发实现QQ三方登录
- LeetCode 43. Multiply Strings
- 对程序学习的看法
- 关于HTTP协议,一篇就够了 (转)
- Spring学习