2013-12-20 5 views
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(); 
    } 
} 

ответ

1

Вы должны уметь использовать Direct Mapping, что-то типа;

import com.sun.jna.*; 

public class MyClass { 

    public static native boolean isDisconnected(); 

    static { 
     Native.register("theDLL"); 
    } 

    public static void main(String[] args) { 
     MyClass.isDisconnected(); 
    } 
} 
+0

Я знаю, что это не связано с вопросом, но не могли бы вы объяснить, что делает 'static' в' статическими { Native.register («theDLL»); } 'делать? – vikingmaster

+0

@Jari Это [статический блок инициализации] (http://docs.oracle.com/javase/tutorial/java/javaOO/initial.html), и он будет запускаться JVM при первом инициализации типа класса. Другими словами, он всегда будет запускаться JVM, прежде чем какой-либо код сможет вызвать или использовать класс. –

+0

О, это похоже на статический конструктор? Awesome – vikingmaster

Смежные вопросы