java - C++ non static callbacks and JNA -


i trying use c++ api in java jna. api uses callbacks handle sessions events.

the resource found on how register callbacks jna this, , deals c callbacks, , don't know how can extended c++ non-static callbacks.

edit: found this resource, think "revisiting callbacks" chapter might help.

all function pointers callbacks stored in following sp_session_callbacks structure:

/**  * session callbacks  *  * registered when create session.  * if callbacks should not of interest, set them null.  */ typedef struct sp_session_callbacks {     void (__stdcall *logged_in)(sp_session *session, sp_error error);     void (__stdcall *logged_out)(sp_session *session);     void (__stdcall *connection_error)(sp_session *session, sp_error error);     void (__stdcall *message_to_user)(sp_session *session, const char *message);     // other callbacks function pointers } sp_session_callbacks; 

the java class created described structure following:

public class sp_session_callbacks extends structure{     public function logged_in;     public function logged_out;     public function connection_error;     public function message_to_user; } 

does make sense represent function pointers com.sun.jna.function objects in case in opinion?

each session represented sp_session object, c++ opaque struct. have handle on sp_session_callbacks object when initialize though.

here code snippet main class:

jlibspotify lib = (jlibspotify)native.loadlibrary("libspotify", jlibspotify.class);  sp_session_config cfg = new sp_session_config(); /* cfg config here */ sp_session_callbacks sesscallbacks = new sp_session_callbacks(); // handle on sp_session_callbacks object cfg.callbacks = sesscallbacks;  pointerbyreference sessionpbr = new pointerbyreference(); int errorid = lib.sessioncreate(cfg, sessionpbr);  sp_session session = new sp_session(sessionpbr.getvalue()); // handle on sp_session object 

how should register callbacks function on java side when triggered?

thank you!

edit

new code using callback instead of function:

public class sp_session_callbacks extends structure{     public loggedin logged_in;     /* other callbacks... */ }    public interface loggedin extends stdcallcallback {     public void logged_in(sp_session session, int error); } 

main class:

jlibspotify lib = (jlibspotify)native.loadlibrary("libspotify", jlibspotify.class);  sp_session_config cfg = new sp_session_config(); /* cfg config here */ sp_session_callbacks sesscallbacks = new sp_session_callbacks(); // handle on sp_session_callbacks object loggedin loggedincallback = new loggedin(){     public void logged_in(sp_session session, int error){         system.out.println("it works");     } }; sesscallbacks.logged_in = loggedincallback; /* setting other callbacks null */  cfg.callbacks = sesscallbacks;  pointerbyreference sessionpbr = new pointerbyreference(); int errorid = lib.sessioncreate(cfg, sessionpbr);  sp_session session = new sp_session(sessionpbr.getvalue()); // handle on sp_session object 

the sessioncreate() call throwing jre fatal error (exception_acces_violation 0x0000005) when cfg.logged_in not set null instance of loggedin. weird thing 2 callbacks logged_in , connection-error have same signature, , when cfg.connection_error set, doesn't throw anything.

from javadoc function represents native method, if want call java method have create callback each function pointer.

if use java callbacks , no native functions can replace function callback. (depending on calling convention used might want use stdcalllibrary.stdcallcallback instead)

public class sp_session_callbacks extends structure{     public stdcallcallback logged_in;     public stdcallcallback logged_out;     public stdcallcallback connection_error;     public stdcallcallback message_to_user; }  sp_session_callbacks calls = new sp_session_callbacks(); calls.logged_out = new stdcallcallback(){      public void somename(sp_session sp){...} } 

Comments

Popular posts from this blog

c# - How to set Z index when using WPF DrawingContext? -

razor - Is this a bug in WebMatrix PageData? -

visual c++ - Using relative values in array sorting ( asm ) -