Below is the code I am working with: C API:
typedef struct {
int matId;
int nMatNameSize;
char* materialName;
int isHyMat;
lDVDetailOutput* dVOutputs;
} innerStruct;
typedef struct {
int nMaterials;
innerStruct** moreDetailOutputs;
} detailOutput;
int LDValues(const char* version,
const detailInput* input,
detailOutput* output);
JNA Declarations:
public static class lDVDetailOutput extends Structure {
public static class ByReference extends lDVDetailOutput implements Structure.ByReference{}
int dValue;
int nVars;
yetAnotherStructure.ByReference vars;
@Override
protected List<String> getFieldOrder() {
return Arrays.asList(new String[] {
"dValue", "nVars", "yetAnotherStructure", });
}
}
public static class jInnerStruct extends Structure{
int matId;
int nMatNameSize;
String materialName;
int isHyMat;
lDVDetailOutput.ByReference dValueOutputs;
jInnerStruct() {
super();
}
@Override
protected List<String> getFieldOrder() {
return Arrays.asList(new String[] {
"matId", "nMatNameSize", "materialName",
"isHyMat", "dValueOutputs", });
}
}
public static class jDetailOutput extends Structure {
public static class ByReference extends detailOutput implements Structure.ByReference{}
int nMaterials;
Pointer moreDetailOutputs; // jInnerStruct**
public jDetailOutput(Pointer p) {
super(p);
read();
}
@Override
protected List<String> getFieldOrder() {
return Arrays.asList(new String[] {
"nMaterials", "moreDetailOutputs", });
}
}
public static LDValues(final String inputString,
final jDetailInput.ByReference inputValues,
jDetailOutput.ByReference outputValues) {}
In my main program I have the following code:
jDetailOutput.ByReference recvDetailOutput = new jDetailOutput.ByReference();
int success = LDValues(stringObject, inputValues, recvDetailOutput);
Pointer[] myDetailOutputPointers = recvDetailOutput.moreDetailOutputs.getPointerArray(0, recvDetailOutput.detailOutput.nMaterials);
jInnerStruct interimLMDO = new jInnerStruct(matDetailOutputPointers[0]);
I am getting a Memory Access error during the read() call in the jDetailOutput(Pointer P) constructor. Specifically when trying to read the dValueOutputs member of jInnerStruct.
Using the Eclipse debugger I see that dValueOutputs has a value of null. I do see that nMaterials in jDetailOutput has a correct value in it.
Do I need to create a different constructor for jInnerStruct?
Thanks, Doug