/ / Wywoływanie DLL z interfejsem C z Java - java, dll, jni

Wywołanie biblioteki DLL z interfejsem C z Java - java, dll, jni

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 № 1

JNI 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.