1

使用 JNA 从 java crash VM 调用 c,谁能告诉我为什么会这样?哪里错了?

c代码:

int Encode(char* systemId, char* account, char* userName, char* tradingPwd, char* expansion, char* ipAddress, char* userAgent, char * encryptedIn, int encrySize);

在 x86_64 x86_64 x86_64 GNU/Linux 机器中将 c 编译为共享的 lig libTestEncode.so,Encode 方法只是对一些字符串进行编码,并将其返回给 java。

爪哇代码:

  public interface CLibrary extends Library {
    CLibrary INSTANCE = (CLibrary) Native.loadLibrary("TestEncode", CLibrary.class);
    int  Encode(String systemId,String account,String userName,String tradingPwd, String expansion, String ipAddress, String userAgent, byte[] encryptedIn, int encryptSize);      
  }

  public static void main(String args[]) {
    Properties p = new Properties();

    byte [] text = new byte[1024];
    int retCd  =CLibrary.INSTANCE.Encode("NRI","userID","username","password","","","",text, 1024);
    System.out.println(Native.toString(text));
    System.out.println("-----");
  }
4

1 回答 1

0

我在我的 Windows 系统上测试了您发布的代码,您对 JNA 的使用是正确的。问题将出在您的 C 端代码中。您应该将您的 C 代码更改为只返回一些值的无操作空函数。您应该不会再看到 JVM 崩溃。然后检查/调试您的 C 代码。

于 2013-02-21T05:01:45.317 回答