JNI: Access a class declared in C++

Posted on 2002-06-17
Medium Priority
Last Modified: 2012-05-05
Dear all,

I have a class declared in C++ and I want to access it in Java code. The problem is I need several instances of the class, so I can't make a global reference to it.

Is there any method that I can pass a pointer of C++ to the Java code? And I need to do something with the class in Java code.

Thank you.

Question by:pigpig
  • 3
  • 3

Expert Comment

by:Igor Bazarny
ID: 7086189

You need to write JNI wrapper for your C++ class. Usually C++ pointer fits into java int, so your java class would look like:

class JavaWrapper{
    private int cppClass;
    public JavaWrapper(){
    public native void doSomething();
    private native void init();

On JNI side, create instance of C++ class in init() implementation and store it in the cppClass field. In other methods you can get cppClass fiels and cast it back to C++ pointer type.

Possibly you will need to take care of memory issues--and it's non-trivial. In java, you know when you need new instance, but don't know when you don't need it anymore. You can use finalize() or weak references to clean up your C++ memory.

Igor Bazarny,
Brainbench MVP for Java 1

Author Comment

ID: 7097757
Hello bazarny,

Do you have some sample codes in doing the pointer conversion in C++? I have some trouble in it.


Expert Comment

by:Igor Bazarny
ID: 7098103

What kind of problem do you have? Is it access to java field or pure C++ problem? I think you just need to cast pointer to long and set value to java field. When you need it back, cast long to same pointer type (unless you are very strict about inheritance/virtual functions use, numeric values of different pointer types pointing to tha same instance may differ)

Igor Bazarny

Hire Technology Freelancers with Gigs

Work with freelancers specializing in everything from database administration to programming, who have proven themselves as experts in their field. Hire the best, collaborate easily, pay securely, and get projects done right.


Author Comment

ID: 7098184
Can u see my problem?
I have a piece of code like that in C++:

#include <iostream.h>

class A
     A(int n) : no(n) {}
     int no;

void main()
     A *a = new A(9);
     int apt = (int) &a;

        A *b = (A *)&apt;
        cout << b->no << endl;

     delete a;

Accepted Solution

Igor Bazarny earned 400 total points
ID: 7098249

> int apt = (int) &a;
you take address of a itself. It should be apt = (int)a;
> A *b = (A *)&apt;
Here again, you take address of apt and convert it into pointer. Write: A* b = (A*)apt;

Author Comment

ID: 7109905
done !!!!!!!!
thx very much~~~~~~

Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

After being asked a question last year, I went into one of my moods where I did some research and code just for the fun and learning of it all.  Subsequently, from this journey, I put together this article on "Range Searching Using Visual Basic.NET …
Introduction Java can be integrated with native programs using an interface called JNI(Java Native Interface). Native programs are programs which can directly run on the processor. JNI is simply a naming and calling convention so that the JVM (Java…
Video by: Michael
Viewers learn about how to reduce the potential repetitiveness of coding in main by developing methods to perform specific tasks for their program. Additionally, objects are introduced for the purpose of learning how to call methods in Java. Define …
Viewers learn about the scanner class in this video and are introduced to receiving user input for their programs. Additionally, objects, conditional statements, and loops are used to help reinforce the concepts. Introduce Scanner class: Importing…
Suggested Courses

607 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question