How can I interface a C++ class to Java? -


i'm working on integrating c++ code dll dependencies java through jni. need retain object instance of c++ subsequent call through java.

could me understand how pass class instance java. appreciate here.

#include <windows.h> #include <iostream> #include <stdlib.h> #include <uil.hpp> #include <deviceinfo.hpp>  typedef hinstance libraryhandle; // pre-define uil library entry points typedef uil* create_uil(const char*, bool, int, const char**); typedef void delete_uil(uil*);  const char* uildriver; bool uilabsolute; int uilparmcount; static libraryhandle uilhandle;  int _tmain(int argc, _tchar* argv[]) {    uilhandle = loadlibrary(text("uil.dll"));        if (uilhandle != null)    {       create_uil* createuil = (create_uil*)getprocaddress(uilhandle, "createuil");       uil = createuil(uildriver, uilabsolute, uilparmcount, uilparms);         **//i need return instance uil java**    } } 

uil.hpp

class uil { public:    //! constructor uil     uil(const char * driver_name, bool absolute, int parm_count, const char* parms[]);   ~uil();   cppextern void infostring(char* str, int size);   cppextern int devicecount();   cppextern int getdevicekey(int index);   int getcurrentdevice();   cppextern int getcurrentdeviceindex();   int setdevice(int key);   cppextern int setdeviceindex(int index);   cppextern int getdeviceinfo(deviceinfo* di);   cppextern int getalldevices(deviceinfo* di, int array_size);   cppextern int send(unsigned char* buffer);   cppextern int getnumwaiting(int &waiting);   cppextern int receive();   cppextern int lockdevice(int index, bool lock);   cppextern bool islocked(int index);   cppextern int receiveinfo(int command_code, int argc, ...);   cppextern int ioctl(int command_code, int argc, ...);   cppextern int errinfo(int command_code, int argc, ...);   int devicelistchangecallback();   cppextern void setlogginglevel(int level);   void getversion(int& major, int& minor, int& revision);   void getdriverversion(int& major, int& minor, int& revision);   const char* errstr(int err_code);   uilabstractdriver * getdriver() { return driver; }  private:   uilabstractdriver* driver;   int last_key;   int key_map[max_device_count];   int logging_level;   char driver_name[81];   void* io_argv[50];   int device_index; }; 

i found solution answer using jna:

#include <windows.h> #include <iostream> #include <stdlib.h> #include <uil.hpp> #include <deviceinfo.hpp>  typedef hinstance libraryhandle; // pre-define uil library entry points typedef uil* create_uil(const char*, bool, int, const char**); typedef void delete_uil(uil*);  const char* uildriver; bool uilabsolute; int uilparmcount; static libraryhandle uilhandle;  extern "c" __declspec(dllexport) uil* initialize(int hba, int port)   {    uilhandle = loadlibrary(text("uil.dll"));        if (uilhandle != null)    {       create_uil* createuil = (create_uil*)getprocaddress(uilhandle, "createuil");       uil = createuil(uildriver, uilabsolute, uilparmcount, uilparms);         return uil;              } } 

java

public interface uilinterfacenative extends library{     public pointerbyreference initialize(int hba, int port);     public int scan(pointerbyreference uil); }  public class main {      /**      * @param args command line arguments      */             public static void main(string[] args) {         // todo code application logic here         uilinterfacenative uil = (uilinterfacenative)native.loadlibrary("uilinterfacenative", uilinterfacenative.class);         pointerbyreference uilpointer = new pointerbyreference();         uilpointer = uil.initialize(0, 2);         int device = uil.scan(uilpointer);         system.out.println("device found: " + device);     }    } 

Comments

Popular posts from this blog

amazon web services - S3 Pre-signed POST validate file type? -

c# - Check Keyboard Input Winforms -