The Artima Developer Community
Sponsored Link

Legacy Java Answers Forum
August 2000

Advertisement

Advertisement

This page contains an archived post to the Java Answers Forum made prior to February 25, 2002. If you wish to participate in discussions, please visit the new Artima Forums.

Message:

How to call this from JSP?

Posted by sarafa Ibraheem on December 06, 2000 at 12:48 PM

Thank you. I found the example quite clear and it worked. How do I call this from a JSP? Thanks.
> Hi

> Here is the procedure to call a C++ dll functions from java. I have
> used this procedure and it works fine.
> 1. Create a class as follows declaring the method of C++ as native.

> //HelloCPlus.java
> class HelloCPlus {
> public native static void Hello ( );
>
> /* Let us make sure dll is loaded when
> we call the Hello () static method.
> you can declare Hello () as non-static too.
> But in that case you have to make sure that
> you call loadLibrary ( ) before calling the
> Hello() method. You may call it in one of the
> constructors +/

> static {
> System.loadLibrary ( "HelloCPlus" ) ;
> }
> }

> //. end of HelloCPlus.java

> 2. Now compile this HelloCPlus.java using
> javac HelloCPlus.java
> on command as you compile any other java program.

> 3. Now we will create the header file. Use
> javah HelloCPlus
> on command line which will create a file HellocPlus.h as follows
> // HelloCPlus.h
> /* DO NOT EDIT THIS FILE - it is machine generated */
> #include
> /* Header for class HelloCPlus */

> #ifndef _Included_HelloCPlus
> #define _Included_HelloCPlus
> #ifdef __cplusplus
> extern "C" {
> #endif
> /*
> * Class: HelloCPlus
> * Method: Hello
> * Signature: ()V
> */
> JNIEXPORT void JNICALL Java_HelloCPlus_Hello
> (JNIEnv *, jclass);

> #ifdef __cplusplus
> }
> #endif
> #endif

> // end of HelloCPlus.h

> 4. Now you have to create the actual function Hello ( ) in c++. But the function
> declaration won't be as simple as void Hello ( ). You can take the function declaration
> in c++ function from HellocPlus.h. I am writing your actual C++ function

> // HelloCPlus.cpp
> #include "HelloCPlus.h"
> #include
> #include

> extern "C" /* You must say extern "C" if you are writing C++ function.
> However, you have to exclude it for c function Note from
> HelloCPlus.h we took the function declaration which
> prefix the actual c++ Hello () function name with java_HelloCPlus_. Also
> note that we have changed the JNIEnv * to JNIEnv* env and jclass to jclass c1*/
> JNIEXPORT void JNICALL Java_HelloCPlus_Hello (JNIEnv* env, jclass c1)
> {
> cout << "Hello Java \n --- From c++ \n" ;
>

> }

> 5. Now you have to make a dll out of .cpp file . If you have MS VC++ then go to DOS prompt
> and run the following .bat file
> C:>vcvars32.bat which is located in your_vcplus_home\vc\bin directory.

> When you run this .bat file you may get error like "out of environment space" as
> I was getting initially. If you get this error then open vcvars32,bat using
> c:> edit vcvars32.bat and try to change the PATH variable to something shorter.
> You may choose to remove the last %PATH%. This hekped me getting rid of that error.

> Once the above .bat file runs successfully you can use following command to create the
> dll.
> c:>cl -Ic:\java_home\include -Ic:\java_home\include\win32 -LD HelloCPlus.cpp -FeHelloCPlus.dll
> Here: cl ( it is CL and C1(one ) ), it is located in vc_home\vc\bin\cl.exe
> c:\java_home : By java_home I mean the directory where you have jdk installed
> on your computer. If your jdk directory is c:\jdk1.3 then replace the java_home by jdk1.3
> -I, -LD, -Fe are switches and you have to type as mentioned.

> The above command will create ( if you are lucky enough to get it work first time ) a dll
> named HelloCPlus.dll.

> 6. Now your C++ function is ready to be called. Create a java program as follows
> // CallCPlus.java
> class CallCPlus {
> public static void main ( String[] args ) {
> HelloCPlus.Hello ( ) ;
> }
> }

>
> // end of CallCPlus.java

> Now compile CallCPlus.java using
> c:>javac CallCPlus.java
> and then run it
> c:\java CallcPlus
> and it will print
> Hello Java
> ---From C++

>
> Thanx
> Kishori






Replies:

Sponsored Links



Google
  Web Artima.com   
Copyright © 1996-2009 Artima, Inc. All Rights Reserved. - Privacy Policy - Terms of Use - Advertise with Us