Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JNA与Eclipse_Java_Eclipse_Jna - Fatal编程技术网

Java JNA与Eclipse

Java JNA与Eclipse,java,eclipse,jna,Java,Eclipse,Jna,我在Windows64位/EclipseKeplex(Java6)下使用JNA 尽管我的程序按预期工作,但在Eclipse下尝试调试时,当我调用其中一个函数时,同一段代码总是引发异常: java.lang.Error: Invalid memory access at com.sun.jna.Native.invokeInt(Native Method) at com.sun.jna.Function.invoke(Function.java:344) at com.su

我在Windows64位/EclipseKeplex(Java6)下使用JNA

尽管我的程序按预期工作,但在Eclipse下尝试调试时,当我调用其中一个函数时,同一段代码总是引发异常:

java.lang.Error: Invalid memory access
    at com.sun.jna.Native.invokeInt(Native Method)
    at com.sun.jna.Function.invoke(Function.java:344)
    at com.sun.jna.Function.invoke(Function.java:276)
    at com.sun.jna.Library$Handler.invoke(Library.java:216)
我已经设置了jna.library.path变量,并且正确地找到并映射了DLL

同样,如果我在Eclipse之外运行完全相同的程序,则根本没有问题

以下是库的界面:

public interface FKCOMM extends StdCallLibrary {
public final static int FK_COMM_MAX_STAT_CODES              = 100;
public final static int STIL_MD5_KEY_LEN                    = 36;

int FofInit(String host, String service, int openNow, LpFof pSrvFof);
int FofClose(Fof srvFof);
Fof FofLast();
int FofClear(Fof srvFof);
int FofExecGetOrigins(Fof srvFof);

int FofExecFml(Fof serv, String appcode, String usercode, String format, String inout, String type,
               String reference, String sender, String receiver, String amount, String currency,
               String currency2, String unit, String userdata, String service, String mur,
               String vflag, String message, int details);
int FofExec(Fof srvFof, int mode, String field, String icn, String mtype, String unit, int details);
int FofExecFmlSimple(Fof serv, String appCode, String userCode, String mode, String unit, String userData, String message, int details);
int FofExecFmt(Fof serv, int i, String c1, String c2, String c3, String c4, String c5, String c6, int i2);

int FniExecBuildBuffer(Fni srvFni, Fof srvFof, String text, char ioIndicator, String businessType,
        String messageId, String messageType, String format, String amount, String currency, String senderReference,
        String entity, String appCode, int detailAlertP, PointerByReference pBuffer, PointerByReference pLen,
        String sender, String receiver, String addInfo, String itvTxt);

int FofExecGetRecord(Fof serv, String recordId);
int FkCommTraceOn(String path, String name, int LogicalMode);
int  FofSetCaller(Fof serv, String caller);
int FofExecSrvReady(Fof serv);
}

以这种方式加载,可在两种环境中工作:

library = (FKCOMM) Native.loadLibrary("FKCOMM", FKCOMM.class);
只要我调用其中一种方法:

result = library.FofExecFmt(session, 1, settings.getFormatName(), data, "", settings.getApplicationId(), request.getId(), "", request.isWithDetails() ? 1 : 0);

我得到了异常(仅在Eclipse中,而不是在生产环境中)…

在Eclipse上JRE的本机库位置添加JNA lib目录

  • 右键单击Eclipse项目->构建路径->配置构建路径
  • 开放JRE系统库
  • 单击本机库位置
  • 编辑
  • 选择JNA库位置