c++中new出来的内存如何安全的传递给java?
char* p = new char[100];
如何将p中的数值安全的传递给java,避免内存泄露等事故。
另外p中存储的不是字符串而是数据,就是说可能有0.
与其对应的java类型好像是byte[],请jni高人出来解答,谢谢
char* p = new char[100];
如何将p中的数值安全的传递给java,避免内存泄露等事故。
另外p中存储的不是字符串而是数据,就是说可能有0.
与其对应的java类型好像是byte[],请jni高人出来解答,谢谢
但接不到他的内存吧
把以下的C++部分的代码放到用javac生成的C接口中就可以了.
参数的签名可以用javap -s -private className 命令来获得.c++代码:
BYTE byteresult[] = {0x00,0xFE,0x00,0x01,0x01};
jbyteArray jbyteArrayResult = pEnv->NewByteArray(5);
pEnv->SetByteArrayRegion(jbyteArrayResult,0,length,(jbyte *)byteresult);jclass obj = pEnv->GetObjectClass(jobj);
jmethodID mid2 = pEnv->GetMethodID(obj,"changeComponent","([Ljava/lang/Byte;)V");
pEnv->CallVoidMethod(jobj,mid2, jbyteArrayResult);
(changeComponent为java中接收参数的一个方法,"([Ljava/lang/Byte;)V"是java中的参数的签名,我这里参数的类型为Byte[],C++中对应该的数据类型为; jbyteArray ,)JAVA 代码:
public void changeComponent(Byte[] resultArray) {
int length = resultArray.length;
System.out.println("resultArray's length is \n"+length);
byte[] byteResultArray = new byte[length];
System.arraycopy(resultArray, 0, byteResultArray, 0, length);
StringBuffer buff = new StringBuffer();
buff.append("{");
for (int i = 0; i < b.length; i++) {
buff.append(toHexString(b[i]));
if (i != b.length - 1) {
buff.append(", ");
}
}
buff.append("}");
System.out.println("resultArray is:");
System.out.println(buff.toString());
}
运行结果:
resultArray's length is
5
resultArray is:
{0x00,0xFE,0x00,0x01,0x01}
java与c++的数据类型对昭表:
Java类型 C++类型 JNI中定义的别名
int long jint
long _int64 jlong
byte signed char jbyte
boolean unsigned char jboolean
char unsigned short jchar
short short jshort
float float jfloat
double double jdouble
Object _jobject* jobject java类型和签名类型的对照表
Java类型 对应的签名
boolean Z
byte B
char C
shrot S
int I
long L
float F
double D
void V
Object L用/分割包的完整类名; Ljava/lang/String;
Array [签名 [I [Ljava/lang/String;
现在准备用java通过jni调用c的动态库来解决问题,所以...
用java通过jni调用c的动态库来解决问题是可以的呀...所以怎么了???????????
有什么问题吗?????????