Próbuję wywołać metody rodzime w bibliotece DLL innej firmy, która ma interfejs C z metodami takimi jak:
DWORD ExampleInterfaceMethod( DWORD Mode, LPSTR Header );
Pomyślnie załadowałem bibliotekę DLL, używając:
System.loadLibrary("DLLName");
i stworzyłem metodę:
protected native int ExampleInterfaceMethod(int type, int Nth, byte[] name);
Wydaje się, że ta metoda nie używa poprawnych typów zmiennych, ponieważ za każdym razem, gdy ją nazywam, generowany jest następujący błąd:
java.lang.UnsatisfiedLinkError: com.DLLTest.ExampleInterfaceMethod (II [B) I
Jakie typy zmiennych muszę używać w Javie, aby wywołać tę metodę, czy brakuje mi czegoś innego?
Odpowiedzi:
3 dla odpowiedzi № 1JNI wymaga specjalnie nazwanych funkcji C do implementacji Java native
metody Nie możesz po prostu dodać native
metoda wywoływania istniejącej funkcji C - zamiast tego normalnym sposobem jest utworzenie „otulającej” funkcji C, która wywołuje istniejącą funkcję i jest nazywana właściwą drogą.
Może chcesz się przyjrzeć JNA. Jest to opakowanie wokół JNI, które pozwala wywoływać funkcje C od strony Java bez ręcznego pisania dostosowując do tego kod macierzysty.