JNI setFloatArrayRegion dll Problem
I've got this similar piece of code working in c previously. Now that
I've altered it into c++..
I had run time error when execute the method on my java server. anyone
have any suggestions to this?
I've tried to get the length of the array returned on the java
server... it return length 1, when it should be 10
error:
# An unexpected error has been detected by HotSpot Virtual Machine:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00c3b41f, pid=5732,
tid=4116
#
# Java VM: Java HotSpot(TM) Client VM (1.5.0_08-b03 mixed mode,
sharing)
# Problematic frame:
# v ~BufferBlob::native signature handlers
#
code:
JNIEXPORT jfloatArray JNICALL
Java_GetResult(JNIEnv *env, jobject jobj, jstring FilePath)
{
// Variables
char *fpath;
int pathlength=0;
int arraylength=10;
// Variables used for testing; mock functions
char ofilename[] = "C:/Log.txt";
FILE *ofp; // all fprintf used in here are for recording infor for
debugging
ofp = fopen(ofilename,"a+");
// Part a: Store FilePath parameter for use
// Get the length of FilePath string in UTF-8 format, should
include terminating NULL character
pathlength= env->GetStringUTFLength(FilePath);
// Allocate memory to store FilePath
if((fpath=new char[pathlength])==NULL) {
fprintf(ofp," Error on New\n");
printf(" Error on New\n");
return NULL;
}
// Copy FilePath to fpath
env->GetStringUTFRegion(FilePath,0,pathlength,fpath);
fprintf(ofp," String: %s\n",fpath);
// Part b: Simulate some operations to process FilePath and create
float array to be returned
float * temp;
int i;
for(i=0; i<arraylength; i++) {
temp[i] = i + 0.1;
fprintf(ofp, "%f ",temp[i]);
printf("%f ",temp[i]);
}
// Part c: prepare float array to be returned
jfloatArray classId;
classId = env->NewFloatArray(arraylength);
if(classId==NULL) {
fprintf(ofp," Error on Array\n");
return NULL;
}
env->SetFloatArrayRegion(classId,0,arraylength,temp);
fclose(ofp);
// Finally return the float array
return classId;
}