繁体   English   中英

JNA和Eclipse

[英]JNA and Eclipse

我正在Windows 64位/ Eclipse Keplex(Java 6)下使用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目录。

  1. 右键单击Eclipse项目->构建路径->配置构建路径
  2. 打开JRE系统库
  3. 单击本机库位置
  4. 编辑
  5. 选择JNA库位置

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM