Java调用C++程序

一 、获取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里的String
class 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值