Я использую C++ DLL через JNA. Я хочу вызвать следующий метод в Java, который записывает в szVisor информацию, которую я хочу прочитать.JNA: EXCEPTION_ACCESS_VIOLATION
long FAR PASCAL DLL_GetLocalPortTS(char* szEquip,char* szVisor){
...
}
Реализация интерфейса Java заключается в следующем:
public interface IE2E extends Library {
// Instancia de la dll, carga la librería
IE2E INSTANCE = (IE2E) Native.loadLibrary("e2e", IE2E.class);
...
int GetLocalPortTS(String equip, String[] equipInfo);
}
и метод вызова:
String equip = "equipID";
String equipInfo = "";
String[] rEquipInfo = {equipInfo};
IE2E sdll = IE2E.INSTANCE;
int ret = sdll.GetLocalPortTS(equip, rEquipInfo);
Это исполнение сетками мне фатальную ошибку в JRE, но если я ставлю как аргументы как String или String [], это не так. Однако, если я использую обе строки, это не перезаписывает equipInfo, и я не получаю информацию, которую я хочу; если я использую как массивы, метод не получает значение экипировки и не работает.
Любое понимание этого приветствуется.
Если 'PASCAL' оценивает' __stdcall', вам необходимо реализовать 'StdCallLibrary' (в противном случае это может привести к сбою). – technomage