2011-09-19 2 views
0

J'ai un programme Java qui communique avec un programme C. J'ai écrit JNI auparavant mais ma structure de sortie était plus simpliste et la structure C contenait juste des doubles/ints et des tableaux de doubles/ints.JNI et accès à une sous-classe

Maintenant, ma structure contient une sous-structure (classe/sous-classe) et je ne sais pas comment changer le code pour accéder aux données/champs de la sous-classe.

Mon code C ressemblait à ceci mais comment puis-je accéder à une valeur comme DefaultFeeAmount si vous regardez ma classe Java sous ce code .... comment puis-je accéder aux éléments de la sous-classe?

C simple ....

{ 
    jclass out_rec_cls = jenv->GetObjectClass(ptrTo_out_rec); 
    jfieldID fldID, fldID2; 
    jintArray arr; 
    jdoubleArray darr; 
    jobjectArray oarr; 
    jsize len;//,len2; 
    jint *arrElems; 
    jdouble *darrElems; 
    jobject *oarrElems; 
    int i; 
    char temp_str[100],temp_str2[10000]; 

    fldID = jenv->GetFieldID(out_rec_cls, "ErrorCode", "I"); 
    if(fldID != NULL) 
     jenv->SetIntField(ptrTo_out_rec, fldID, out_rec->error_code); 
} 

Java

class FeeOutput { 
    public double DefaultFeeAmount; 
    public double MaximumAmount; 
    public int FeeID; 
    public int CompType; 
    public int Handling; 
    public int CapType; 
    public int ProfitType; 
    public int EffectiveDateMonth; 
    public int EffectiveDateDay; 
    public int EffectiveDateYear; 
    public int VendorBasedFee; 
    public int DealerRequestedFee; 
    public int DealerFixedTranFee; 
    public double FeeAmount; 
    public int FeeCompliant; 
    public String FeeName = ""; 

    public FeeOutput() { 
    } 
} 

public class VFeeOutput { 
    public static final int NUM_FEES = 100; 
    public FeeOutput[] FeeStruct = new FeeOutput[NUM_FEES]; 

    public int ErrorCode; 

    public String ErrorString = ""; 

    public String Version = ""; 

    public VFeeOutput() { 
    } 
} 

Répondre

0

Comme une pointe de convention Java répandue, s'il vous plaît commencer les noms de variables avec minuscules. Voici comment accéder aux champs "struct" en Java.

public class VFeeOutput { 
    public static final int NUM_FEES = 100; 
    public FeeOutput[] FeeStruct = new FeeOutput[NUM_FEES]; 
    public int ErrorCode; 
    public String ErrorString = ""; 
    public String Version = ""; 
    public VFeeOutput() { 
    } 

    private void loopThoughtFeeOutput() { 
     for(FeeOutput feeOutput : FeeStruct) { 
      feeOutput.CompType = ...; 
     } 
     // or 
     for(int i = 0; i < FeeStruct.length; i++) { 
      FeeStruct[0].CompType = ...; 
     } 
    } 
}