Я написал DLL, который должен быть использован в Java:Недопустимый доступ к памяти
public interface MyInterface extends Library {
public void GetDllVersion(char[] buffer, int bufferLen);
...
}
MyInterface instance=(MyInterface) Native.loadLibrary(basename,MyInterface.class);
char[] buffer=new char[20];
instance.GetDllVersion(buffer,buffer.length);
Соответствующий C Код является
void __declspec(dllexport) GetDllVersion(char *buffer,int bufferLen) {
...
}
Я также обратился jna.debug_load
дальше, чтобы увидеть некоторые результаты. Lib загружается, как и ожидалось, но вызов GetDllVersion
завершается с
Exception in thread "main" java.lang.Error: Invalid memory access
at com.sun.jna.Native.invokeVoid(Native Method)
at com.sun.jna.Function.invoke(Function.java:367)
at com.sun.jna.Function.invoke(Function.java:315)
at com.sun.jna.Library$Handler.invoke(Library.java:212)
at com.sun.proxy.$Proxy0.GetDllVersion(Unknown Source)
at Main.main(Main.java:34)
Dependency Walker показывает, что DLL экспортирует эту функцию.
Как узнать, что именно не так с вызовом функции?
Возможно, GetDllVersion ожидает, что буфер будет длиннее 20 байтов? – Creris
В целях тестирования я прокомментировал все внутри тела метода GetDllVersion. Таким образом, практически эта функция ничего не делает – gorootde
@k_wave. Значит, у вас нет способа использовать отладчик для отладки функции DLL? Я уверен, что DLL можно отлаживать с помощью отладчика, и вам нужно выяснить, как это сделать. – PaulMcKenzie