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