1

JNAを使用してJavaクラッシュVMからcを呼び出します。これが発生した理由を誰かに教えてもらえますか?どこが間違っているのですか?

cコード:

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

cをx86_64x86_64x86_64 GNU /Linuxマシンの共有liglibTestEncode.soにコンパイルします。Encodeメソッドは文字列をエンコードし、それをjavaに返します。

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 に答える