This week's book giveaways are in the Java EE and JavaScript forums.
We're giving away four copies each of The Java EE 7 Tutorial Volume 1 or Volume 2(winners choice) and jQuery UI in Action and have the authors on-line!
See this thread and this one for details.
The moose likes Beginning Java and the fly likes JNI What is it, and can I use it Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of The Java EE 7 Tutorial Volume 1 or Volume 2 this week in the Java EE forum
or jQuery UI in Action in the JavaScript forum!
JavaRanch » Java Forums » Java » Beginning Java
Bookmark "JNI What is it, and can I use it" Watch "JNI What is it, and can I use it" New topic
Author

JNI What is it, and can I use it

Terry Stehle
Greenhorn

Joined: Mar 24, 2001
Posts: 24
I was wondering what JNI was and if I could use it to convert my C++ program that I have written with Borland C++ Builder 5.0 into java. I would appricate any help, Thanks!
Cindy Glass
"The Hood"
Sheriff

Joined: Sep 29, 2000
Posts: 8521
The JNI (Java Native Interface) will let you use your C code WITHOUT converting it to JAVA. You just blend them together using this interface.
Here is a tutorial: http://java.sun.com/docs/books/tutorial/native1.1/index.html


"JavaRanch, where the deer and the Certified play" - David O'Meara
Terry Stehle
Greenhorn

Joined: Mar 24, 2001
Posts: 24
Thanks for you help
jrmchen
Greenhorn

Joined: Mar 26, 2001
Posts: 5
Example of How to use JNI to let Java Call C
Including Java Send Para (no pointer) into C and Java Get Value returned from C function
[Step 1]
>Create HelloWorld.java
-------------------------------------------------------
class HelloWorld {
public native void displayHelloWorld(int mint);
public native int ReturnValue(int mint);
static {
System.loadLibrary("hello");
}

public static void main(String[] args) {
new HelloWorld().displayHelloWorld(123);
int i=new HelloWorld().ReturnValue(123);
System.out.println(i);
}
}
-------------------------------------------------------
[Step 2]
>Command Line Type
d:\jni\javac HelloWorld.java
-------------------------------------------------------
[Step 3]
>Command Line Type
d:\jni\javah HelloWorld
HelloWorld.h would be automaticly Created
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloWorld */
#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloWorld
* Method: ReturnValue
* Signature: (I)I
*/

JNIEXPORT jint JNICALL Java_HelloWorld_ReturnValue
(JNIEnv *, jobject, jint);
/*
* Class: HelloWorld
* Method: displayHelloWorld
* Signature: (I)V
*/
JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld
(JNIEnv *, jobject, jint);
#ifdef __cplusplus
}
#endif
#endif
-------------------------------------------------------
[Step 4]
>Write HelloWorldImp.c file
#include <jni.h>
#include "HelloWorld.h"
#include <stdio.h>
JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj,jint mint)
{
printf("My Hello world %d!\n",mint);
return;
}
JNIEXPORT jint JNICALL Java_HelloWorld_ReturnValue(JNIEnv *env, jobject obj,jint mint)
{
return mint+1;
}
-------------------------------------------------------
[Step 5]
>Make hello.dll Using VC commandline
cl -I c:\jdk1.3\include -I c:\jdk1.3\include\win32 -LD HelloWorldImp.c -FeHello.dll
Message Displayed
/dll
/implib:Hello.lib
/out:Hello.dll
HelloWorldImp.obj
Creating library Hello.lib and object Hello.exp
-------------------------------------------------------
[Step 6]
> Run HelloWorld.class
Message Displayed
My Hello world 123!
124
 
It is sorta covered in the JavaRanch Style Guide.
 
subject: JNI What is it, and can I use it