共享,JNI用法,初学适用.

hy1080 2005-03-21 04:02:16
最近学JAVA在网上一直没找到关于JNI的示例,最后自己安说明书上的方法做了几个示例,现共享:

//无参数传递的C调用用法
//新建一个一个文本文件改名为HelloWorld.java
//内容如下:

class HelloWorld {
public native void displayHelloWorld();
public native void ListRectang();
static {
System.loadLibrary("hello");
}

public static void main(String[] args) {
new HelloWorld().displayHelloWorld();
new HelloWorld().ListRectang();
}
}


//----------------------------------
//在命令提示符下输入
//javac HelloWorld.java
//生成HelloWorld.class文件
//在命令提示符下输入
//javah -jni HelloWorld
//生成HelloWorld.h文件这是C的头文件

//-----------------------------------
//无参数传递的C调用用法
//新建一个一个文本文件改名为HelloWorldImp.c
//内容如下:
#include <jni.h>
#include "HelloWorld.h" //刚生成的文件
#include <stdio.h>

//下面这个函数的格式可以参照刚生成的.h头文件来定义
//JAVA DOC里有说明
JNIEXPORT void JNICALL
Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj)
{
printf("Hello world!\n");
return;
}

JNIEXPORT void JNICALL
Java_HelloWorld_ListRectang(JNIEnv *env, jobject obj)
{
int i=0, j=0;
for (i=0; i< 0; i++)
{
for (j=0; j<10; j++)
{
printf("*");
}
printf("\n");
}
}


//-------------------------------------------------------
//运行VC编译程序编译C源文件
//注:-Ic:\java1.5.0\include 是linux式传参方法.-I表示include与后面的c之间无空格,后同.
cl -Ic:\java1.5.0\include -Ic:\java1.5.0\include\win32 -LD HelloWorldImp.c -FeHello.dll

//之后就可运行这个程序了
//java HelloWorld
//你看到了什么?
...全文
182 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
nopublic 2005-03-21
  • 打赏
  • 举报
回复
网上有例子的,这个我也早就写过
baggio5277 2005-03-21
  • 打赏
  • 举报
回复
我看见俩神经病
xiaoshenjingbing 2005-03-21
  • 打赏
  • 举报
回复
我什么也没看见
baggio5277 2005-03-21
  • 打赏
  • 举报
回复
厉害厉害 帮顶!!!!
milkbottle 2005-03-21
  • 打赏
  • 举报
回复
支持楼主分享阿
帮顶一下
hy1080 2005-03-21
  • 打赏
  • 举报
回复
以String做为参数的函数调用示例:
//JAVA文件
import java.io.*;
import javax.swing.*;

class HelloWorld {
public native String displayHelloWorld(String str);

static {
System.loadLibrary("hello");
}

public static void main(String[] args) {
String str = new HelloWorld().displayHelloWorld("Tom");
System.out.println(str);
}
}



//C文件
#include <jni.h>
#include "HelloWorld.h"
#include <stdio.h>

JNIEXPORT jstring JNICALL Java_HelloWorld_displayHelloWorld
(JNIEnv *env, jobject obj, jstring str)
{
/* DO NOT USE jstring THIS WAY !!! */
// JNIEXPORT jstring JNICALL
// Java_Prompt_getLine(JNIEnv *env, jobject obj, jstring prompt)
// {
// printf("%s", prompt);
// ...
// by: http://java.sun.com/docs/books/tutorial/native1.1/implementing/string.html

char buf[128];
const char *temp = (*env)->GetStringUTFChars(env, str, 0);
printf("Hello %s !\n", temp);
(*env)->ReleaseStringUTFChars(env, str, temp);
printf("Please input string:");
scanf("%s", buf);
return (*env)->NewStringUTF(env, buf);
}
hy1080 2005-03-21
  • 打赏
  • 举报
回复
以整型做为参数的,示例命令输入同上
class HelloWorld {
public native void displayHelloWorld(int a);

static {
System.loadLibrary("hello");
}

public static void main(String[] args) {
new HelloWorld().displayHelloWorld(1);
}
}


#include <jni.h>
#include "HelloWorld.h"
#include <stdio.h>

JNIEXPORT void JNICALL
Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj, jint a)
{
printf("This is a intger :%d!\n", a);
return;
}

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧