У меня проблемы с JNA и файлом DLL, созданным из LabVIEW. Я могу вызвать его, когда я не использую эту строку, первая:
FileWriter writer = new FileWriter(FirstPath);
BufferedWriter writing = new BufferedWriter(writer);
writing.write("Here goes my strings");
writing.close();
После этого класс DLL выглядит следующим образом:
DLLClass dll = (DLLClass)Native.loadLibrary("DLLFile",DLLClass.class);
dll.myMethodInsideDLLClass(FirstPath,SecondPath,ThirdPath);
Похоже, что этопытаясь получить доступ к какой-то случайной FirstPath или я не знаю что. Это дает мне эту ошибку.
Exception in thread "AWT-EventQueue-0" java.lang.Error: Invalid memory access
at com.sun.jna.Native.getStringBytes(Native Method)
at com.sun.jna.Native.getString(Native.java:2224)
at com.sun.jna.Pointer.getString(Pointer.java:681)
at com.sun.jna.Function.invokeString(Function.java:667)
at com.sun.jna.Function.invoke(Function.java:434)
at com.sun.jna.Function.invoke(Function.java:361)
at com.sun.jna.Library$Handler.invoke(Library.java:265)
at com.sun.proxy.$Proxy0.myMethodInsideDLLClass(Unknown Source)
Я имею в виду, как в мире я могу получить доступ к тому же файлу, в который я пытаюсь записать, и затем вызвать его снова в методе dll? Я пытался и ничего не получалось. Кто-нибудь может мне помочь? Я был бы очень признателен за это!
Примечание: это мой DllClass:
public interface DLLClass extends Library{
public int myMethodInsideDLLClass(String
FirstPath, String SecondPath, String ThirdPath);
}
расширяет Libray от jna.jar.
Вот что внутри моего файла FileDll.h:
#ifdef __cplusplus
extern "C" {
#endif
int32_t __cdecl myMethodInsideDLLClass(
char FirstPath[], char SecondPath[],
char ThirdPath[]);
MgErr __cdecl LVDLLStatus(char *errStr, int errStrLen, void *module);
void __cdecl SetExcursionFreeExecutionSetting(Bool32 value);
#ifdef __cplusplus
} // extern "C"
#endif
#pragma pack(pop)