How to use dll in Java

3

How do I include dll files in a Java project using Eclipse?

    
asked by anonymous 16.07.2015 / 13:03

2 answers

3

You must use one of the JAVA APIs available to access native code , are these:
JNI (Java Native Interface) and JNA (Java Native Access) . Home JNI is the official Java API (Oracle) and JNA is open source maintained by the community.
While both have the same goal, the development of JNA was focused on simplifying implementation to the maximum, common problem in implementation using JNI. Home I recommend using JNA for you to achieve your goal, here is an example that you can use as a reference to your implementation:

Example of native application in C ++ >

#include "simpleDLL.h"

#include <stdexcept>

using namespace std;

namespace simpleDLLNS
{
    char simpleDLL::giveVoidPtrGetChar(void* param)
    {
        if(param != 0)
        {
        char* paramChrPtr = (char*)param;
        return *paramChrPtr;
        }
        else
        {
            return 'x';
        }

    }

    int simpleDLL::giveIntGetInt(int a)
    {
        return 2*a;
    }

    void simpleDLL::simpleCall(void)
    {
        int x = 3;
        return;
    }

    int simpleDLL::giveVoidPtrGetInt(void* param)
    {
        if(param!=0)
        {
            int* x = (int*)param;
            return *x;

        }
        else
        {
            return -1;
        }
    }

}

JNA call to DLL methods above:

package jnahelloworldtest;

import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.NativeLong;
import com.sun.jna.Platform;
import com.sun.jna.*;

/** Simple example of native library declaration and usage. */
public class Main {
    public interface simpleDLL extends Library {
        simpleDLL INSTANCE = (simpleDLL) Native.loadLibrary(
            (Platform.isWindows() ? "simpleDLL" : "simpleDLLLinuxPort"), simpleDLL.class);
        // it's possible to check the platform on which program runs, for example purposes we assume that there's a linux port of the library (it's not attached to the downloadable project)
        byte giveVoidPtrGetChar(Pointer param); // char giveVoidPtrGetChar(void* param);
        int giveVoidPtrGetInt(Pointer param);   //int giveVoidPtrGetInt(void* param);
        int giveIntGetInt(int a);               // int giveIntGetInt(int a);
        void simpleCall();                      // void simpleCall();
    }

    public static void main(String[] args) {

        simpleDLL sdll = simpleDLL.INSTANCE;

        sdll.simpleCall();  // call of void function

        int a = 3;
        int result1 = sdll.giveIntGetInt(a);  // calling function with int parameter&result
        System.out.println("giveIntGetInt("+a+"): " + result1);

        String testStr = "ToBeOrNotToBe";
        Memory mTest = new Memory(testStr.length()+1);  // '+1' remember about extra byte for 
#include "simpleDLL.h"

#include <stdexcept>

using namespace std;

namespace simpleDLLNS
{
    char simpleDLL::giveVoidPtrGetChar(void* param)
    {
        if(param != 0)
        {
        char* paramChrPtr = (char*)param;
        return *paramChrPtr;
        }
        else
        {
            return 'x';
        }

    }

    int simpleDLL::giveIntGetInt(int a)
    {
        return 2*a;
    }

    void simpleDLL::simpleCall(void)
    {
        int x = 3;
        return;
    }

    int simpleDLL::giveVoidPtrGetInt(void* param)
    {
        if(param!=0)
        {
            int* x = (int*)param;
            return *x;

        }
        else
        {
            return -1;
        }
    }

}
character! mTest.setString(0, testStr); String testReturn = mTest.getString(0); // you can see that String got properly stored in Memory object System.out.println("String in Memory:"+testReturn); Memory intMem = new Memory(4); // allocating space intMem.setInt(0, 666); // setting allocated memory to an integer Pointer intPointer = intMem.getPointer(0); int int1 = sdll.giveVoidPtrGetInt(Pointer.NULL); // passing null, getting default result System.out.println("giveVoidPtrGetInt(null):" + int1); // passing int stored in Memory object, getting it back int int2 = sdll.giveVoidPtrGetInt(intMem); //int int2 = sdll.giveVoidPtrGetInt(intPointer); causes JVM crash, use memory object directly! System.out.println("giveVoidPtrGetInt(666):" + int2); byte char1 = sdll.giveVoidPtrGetChar(Pointer.NULL); // passing null, getting default result byte char2 = sdll.giveVoidPtrGetChar(mTest); // passing string stored in Memory object, getting first letter System.out.println("giveVoidPtrGetChar(null):" + (char)char1); System.out.println("giveVoidPtrGetChar('ToBeOrNotToBe'):" + (char)char2); } }


Mapping Table


Morereferences:
/blog.mwrobel.eu/how-to-call-dll-methods-from-java/">Sample source

    
20.07.2015 / 03:12
-1
  • Project Properties
  • Source
  • Link source
  • Browse
  • Select
  • Ok
  • link

        
    16.07.2015 / 13:08