Hallo,
habe folgendes Problem:
In meinem JAVA Objekt, dass ich der nativen C Methode als "jobject Key" übergebe, sind einige unitialisierte Attribute vorhanden. Unter anderem ein JAVA ByteArray Attribut mit dem Namen "keyrecord".
Die ID des Feldes zu bekommen ist erstmal kein Problem:
Jetzt möchste ich allerdings erreichen, dass ich aus einem C Objekt ein unsigned char Attribut als jbyteArray abspeichere und dem JAVA Konstruktor dem entsprechendem Feld übergebe.
Also folgendermaßen ist das C Objekt definiert.
wobei
Ich will nun das unsigned char-Array keyRecord unter pubKeyrecordID abspeichern. Folgendes habe ich probiert und funktioniert leider nicht.
Für Datentyp "int" ist die Übergabe über "SetIntField" problemlos. Kann mir jemand weiterhelfen und sagen, wie ich das char array "keyRecord" als JAVA Byte Array im Konstruktor unter byte [] keyrecord abspeichere?
habe folgendes Problem:
In meinem JAVA Objekt, dass ich der nativen C Methode als "jobject Key" übergebe, sind einige unitialisierte Attribute vorhanden. Unter anderem ein JAVA ByteArray Attribut mit dem Namen "keyrecord".
Die ID des Feldes zu bekommen ist erstmal kein Problem:
Code:
jclass PublicKey=(*env)->GetObjectClass(env, Key);
jfieldID pubKeyrecordID=(*env)->GetFieldID(env, PublicKey, "keyrecord","[B");
Jetzt möchste ich allerdings erreichen, dass ich aus einem C Objekt ein unsigned char Attribut als jbyteArray abspeichere und dem JAVA Konstruktor dem entsprechendem Feld übergebe.
Also folgendermaßen ist das C Objekt definiert.
Code:
typedef struct _ICA_KEY_RSA_MODEXPO
{ unsigned int keyType; /* RSA key type. */
unsigned int keyLength; /* Total length of the token. */
unsigned int modulusBitLength; /* Modulus n bit length. */
/* -- Start of the data length.*/
unsigned int nLength; /* Modulus n = p * q */
unsigned int expLength; /* exponent (public or private)*/
/* e = 1/d * mod(p-1)(q-1) */
/* -- Start of the data offsets*/
unsigned int nOffset; /* Modulus n . */
unsigned int expOffset; /* exponent (public or private)*/
unsigned char reserved[112]; /* reserved area */
/* -- Start of the variable -- */
/* -- length token data. -- */
ICA_KEY_RSA_MODEXPO_REC keyRecord;
} ICA_KEY_RSA_MODEXPO;
wobei
Code:
typedef unsigned char ICA_KEY_RSA_MODEXPO_REC[MAX_MODEXP_SIZE];
Ich will nun das unsigned char-Array keyRecord unter pubKeyrecordID abspeichern. Folgendes habe ich probiert und funktioniert leider nicht.
Code:
ICA_KEY_RSA_MODEXPO wockey;
jbyteArray byteArray = (*env)->GetObjectField(env, xxxobject, pubKeyrecordID);
(*env)->SetObjectField(env, xxxobject, pubKeyrecordID, wockey.keyRecord);
Für Datentyp "int" ist die Übergabe über "SetIntField" problemlos. Kann mir jemand weiterhelfen und sagen, wie ich das char array "keyRecord" als JAVA Byte Array im Konstruktor unter byte [] keyrecord abspeichere?