Я пытался узнать, как работает JNA, поэтому я решил использовать API spotify (libspotify 0.0.7). Мне удалось правильно загрузить мою dll, но тогда похоже, что мой код не находит ни один из методов, определенных в API.
Вот мой тестовый код:
public class Test {
static{
System.loadLibrary("libspotify");
}
public interface LibSpotify extends Library {
public static class sp_artist extends Structure{
public String name;
public boolean isLoaded;
public int refCount;
};
LibSpotify INSTANCE = (LibSpotify)Native.loadLibrary("libspotify", LibSpotify.class);
public String sp_artist_name(sp_artist artist);
}
public static void main(String[] args){
LibSpotify ls = LibSpotify.INSTANCE;
LibSpotify.sp_artist artist = new LibSpotify.sp_artist(){
String name = "thename";
boolean isLoaded = false;
int refCount = 0;
};
ls.sp_artist_name(artist);
}
}
Вот описание C метода, к которому я пытаюсь получить доступ, в файле api.h libspotify:
/**
* Return name of artist
*
* @param[in] artist Artist object
*
* @return Name of artist.
* Returned string is valid as long as the artist object stays allocated
* and no longer than the next call to sp_session_process_events()
*/
SP_LIBEXPORT(const char *) sp_artist_name(sp_artist *artist);
А вот и мой StackTrace:
* * 1010
Есть ли проблема с моей DLL, или я что-то не так делаю?
Кстати, у меня нет доступа к определению структуры sp_artist в C, я просто реконструировал ее на основе методов, предлагаемых API, это может быть проблемой?
/**
* @defgroup artist Artist subsystem
* @{
*/
/**
* Return name of artist
*
* @param[in] artist Artist object
*
* @return Name of artist.
* Returned string is valid as long as the artist object stays allocated
* and no longer than the next call to sp_session_process_events()
*/
SP_LIBEXPORT(const char *) sp_artist_name(sp_artist *artist);
/**
* Check if the artist object is populated with data
*
* @param[in] artist An artist object
*
* @return True if metadata is present, false if not
*
*/
SP_LIBEXPORT(bool) sp_artist_is_loaded(sp_artist *artist);
/**
* Increase the reference count of a artist
*
* @param[in] artist The artist object
*/
SP_LIBEXPORT(void) sp_artist_add_ref(sp_artist *artist);
/**
* Decrease the reference count of a artist
*
* @param[in] artist The artist object
*/
SP_LIBEXPORT(void) sp_artist_release(sp_artist *artist);
/** @} */
Спасибо!