Java Programming Tutorial-JNI(翻译)(续)

8 篇文章 0 订阅

JNI with C/C++ Mixture

 

第一步:写一个使用Native代码的java类 HelloJNICpp.java

public class HelloJNICpp {
   static {
      System.loadLibrary("hello"); // hello.dll (Windows) or libhello.so (Unixes)
   }
 
   private native void sayHello();
 
   public static void main(String[] args) {
      new HelloJNICpp().sayHello();
   }
}

 编译HelloJNICpp.java成HelloJNICpp.class

   

javac HelloJNICpp.java

 

    第二步: 创建一个C/C++的头文件 HelloJNICpp.h

    

javah HelloJNICpp

    生成的头文件HelloJNICpp.h 包括以下内容

    JNIEXPORT void JNICALL java_HelloJNICpp_sayHello(JNIEnv*, jobject);

 

    第三 步:C/C++实现 HelloJNICppImpl.h  HelloJNICppImpl.cpp 和HelloJNICpp.c

    我们应该实现程序HelloJNICppImpl.h 和HelloJNICppImpl.cpp在C++代码里面,但是实现Java接口在HellJNICp在C里面。

    C++ Header - "HelloJNICppImpl.h"

    

#ifndef _HELLO_JNI_CPP_IMPL_H
#define _HELLO_JNI_CPP_IMPL_H
 
#ifdef __cplusplus
        extern "C" {
#endif
        void sayHello ();
#ifdef __cplusplus
        }
#endif
 
#endif

 

    C++实现 - "HelloJNICppImpl.cpp"

    

#include "HelloJNICppImpl.h"
#include  <iostream>
 
using namespace std;
 
void sayHello () {
    cout << "Hello World Again!" << endl;
    return;
}

     C实现java接口 - "HelloJNICpp.c"

    

#include <jni.h>
#include "HelloJNICpp.h"
#include "HelloJNICppImpl.h"
 
JNIEXPORT void JNICALL Java_HelloJNICpp_sayHello (JNIEnv *env, jobject thisObj) {
    sayHello();  // invoke C++ function
    return;
}

    编译C/C++程序到hello.dll

    

MinGW  GCC in windows

>g++ -Wl,--add-stdcall-alias -I"<JAVA_HOME>\include" -I"<JAVA_HOME>\include\win32" 
      -shared -o hello.dll HelloJNICpp.c HelloJNICppImpl.cpp

   第四步:运行Java程序

   

> java HelloJNICpp
or
> java -Djava.library.path=. HelloJNICpp

 

   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值