C++异常处理

异常详情1
error C3863: 不可指定数组类型”jfloat [lengthX][lengthY]”

异常点代码

1
jfloat outData[lengthX][lengthY];

异常缘由
C++声明数组时,不允许使用变量动态声明或者不声明大小。
解决方案
改为jfloat outData[2400][2400];后正常,或者使用malloc()函数动态分配内存空间。

异常详情2
error C2660: “JNIEnv_::GetArrayLength”: 函数不接受 2 个参数
异常点代码

1
int lengthX = (env -> GetArrayLength(env,array));

异常缘由
重复传入了参数env
解决方案
改为int lengthX = (env -> GetArrayLength(array));后正常

异常详情3
pointToGrid.cpp(21): error C2440: “=”: 无法从“jobject”转换为“jarray”
pointToGrid.cpp(21): note: 从基类型到派生类型的强制转换需要 dynamic_cast 或 static_cast
异常点代码

1
jarray myarray =(env -> GetObjectArrayElement(array,0));

异常缘由
无法实现自动类型转换,需要显示强制转换数据类型
解决方案
强制类型转换

1
jarray myarray = (jarray)(env -> GetObjectArrayElement(array,0));

异常详情4
gdal_i.lib : warning LNK4272:库计算机类型“x64”与目标计算机类型“x86”冲突
error LNK2019: 无法解析的外部符号 _VSIFree,该符号在函数 “public: void __thiscall CPLString::Seize(char *)” (?Seize@CPLString@@QAEXPAD@Z) 中被引用
异常缘由
当前平台与编译工具不匹配
解决方案
使用对应平台的编译器编译

参考资料
JNI/NDK 开发指南
JNI教程与技术手册