2
Используя Java и библиотеку JNA, я хочу получить доступ к статическим методам, найденным в коммерческом DLL-файле (C#).Как получить доступ к статическим методам?
К сожалению, Java 7 не разрешает статические методы в интерфейсе, и хотя Java 8 изменит это, последняя бета-версия выглядит безразличной.
Предложения/исправления приветствуются (я новичок в JNA и избегаю JNI), и я использовал Javonet для подтверждения подписи метода.
import com.sun.jna.Library;
import com.sun.jna.Native;
public class INeedHelp {
public interface MyInterface extends Library {
public static boolean isDisconnected(); //Mirror of C# method signature, but wont work
public boolean isDisconnected(); //best fit, but throws exception "Error looking up function 'isDisconnected': The specified procedure could not be found."
}
public static void main(String[] args) {
MyInterface anInstance = (MyInterface) Native.loadLibrary("theDLL", MyInterface.class);
anInstance.isDisconnected();
}
}
Я знаю, что это не связано с вопросом, но не могли бы вы объяснить, что делает 'static' в' статическими { Native.register («theDLL»); } 'делать? – vikingmaster
@Jari Это [статический блок инициализации] (http://docs.oracle.com/javase/tutorial/java/javaOO/initial.html), и он будет запускаться JVM при первом инициализации типа класса. Другими словами, он всегда будет запускаться JVM, прежде чем какой-либо код сможет вызвать или использовать класс. –
О, это похоже на статический конструктор? Awesome – vikingmaster