Я пытаюсь получить доступ к сторонней С++ DLL, используя JNA. Я просмотрел доступную документацию JNA и некоторый блог для понимания JNA.
Но теперь я застрял с проблемой. В DLL, которая у меня есть, есть несколько классов. И функции определены внутри классов. Итак, существует иерархия. Как я могу получить доступ к функциям тогда?
Например, у меня есть DLL с именем: «abc.dll». В этой dll у меня есть класс «pqrs», и в этом классе есть функция с именем xyz()
. Я хочу получить доступ к функции xyz()
.
До сих пор я могу успешно загрузить abc.dll следующим образом:
abc abcDLL = (abc) Native.loadLibrary("abc", abc.class);
Я создал такой интерфейс:
public interface abc extends Library {
void xyz(); // this is wrong because "xyz" is not directly "abc.dll" but inside the class "pqrs" which is inside abc.dll
}
И так внутри dll есть несколько классов. Я много искал в Интернете об этом. Но не смог найти решение. Я наткнулся на эти сообщения:
- Доступ к методам DLL с несколькими классами с использованием JNA
- http://www.javaprogrammingforums.com/java-theory-questions/8865-using-jna-access-export-native-classes.html
Но там никто не ответил.
?Foo@CXyz@@QAEHH@Z
(как в codeproject.com/Articles/28969/)? Причина в том, что схема изменения имен C++ нестандартизирована, и если она используется в вашем экспорте DLL (что, скорее всего, так и есть), то у вас очень мало шансов получить надежный доступ даже к членам, не относящимся к классу. В нынешнем виде, с предоставленной информацией, короткий ответ таков: вы не можете сделать это, если только классы в DLL не были специально разработаны для использования с JNI. - person Jason C   schedule 16.11.2013