论坛首页 Java企业应用论坛

java jni的调用

浏览 3119 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-11-13  
当我们在java中要调用C/C++程序的函数时,就需要用到jni技术。
开发环境:aix
本人写了一个测试,步骤如下:
1。新建HelloWorld.java类
public class HelloWorld
{
  static
  {
    try
    {
      //此处即为本地方法所在链接库名
      System.loadLibrary("HelloWorld");
    }catch(UnsatisfiedLinkError e){
      System.err.println( "不能加载dll文件:\n " +e.toString() );
    }
  }//end static
public native void SayHello(String strName);

}

2。运行javah HelloWorld 生成HelloWorld.h文件

3.编写helloWorld.c文件
#include <windows.h>
#include "HelloWorld.h"
#include <stdio.h>

JNIEXPORT void JNICALL Java_HelloWorld_SayHello (JNIEnv * env, jobject arg, jstring instring)
{

  const jbyte *str =
   (const jbyte *)env->GetStringUTFChars( instring, JNI_FALSE );
printf("HelloWorld,%s\n",str);

env->ReleaseStringUTFChars( instring, (const char *)str );
return;
}
int WINAPI DllMain (HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved)
{
    return TRUE ;
}

4.编译生成.so
cc -I./ -I/usr/include -I/usr/java14/include -o \
libHolleWorld.so -bE:HolleWorld.exp -bnoentry -bM:SRE HolleWorld.c
其中HelloWorld.exp声明符号输出文件,内容如下:
Java_HelloWorld_SayHello
(注意。操作系统不同,编译生成.so的方法不同)

5.编写方法,在HelloWorld.java中加如下方法
public static void main(String args[]){
        HelloWorld hw = new HelloWorld();
        hw.SayHello("Christmas");   
    }

6.运行javac HelloWorld.java
7.运行java HelloWorld.输出如下结果
  HelloWorld Christmas




论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics