なんか怖いのでちゃんと配列の型でできないかとやってみた。
Java 側の FromC#loadFile(String filename, byte[] outBuffer) を呼び出しています。
また部分抜き出しなので不明な定義があります。(buffSize やら pBuffer やら)
// ファイル名オブジェクト生成 jstring js = charToJstring(env, pFileName); // const char* -> jstring // 受取り用バッファオブジェクト生成 jbyteArray ba = env->NewByteArray(buffSize); jbyte* pArray = NULL; if (js && ba) { // クラスを取得 jclass classObj = env->FindClass( "FromC" ); jmethodID method = env->GetStaticMethodID(classObj, "loadFile", "(Ljava/lang/String;[B)Z"); do { if (method == NULL) { LOGE( "method null" ); break; } bool result = env->CallStaticBooleanMethod(classObj, method, js, ba); if (result == false) { LOGE( "failed loadFile" ); break; } jboolean isCopy = JNI_FALSE; pArray = env->GetByteArrayElements(ba, &isCopy); if (isCopy == JNI_TRUE) { // TODO } jsize arraySize = env->GetArrayLength( ba ); if (pArray && arraySize <= buffSize) { // 受取り用バッファにコピー memcpy( pBuffer, pArray, arraySize ); } else { LOGE( "failed copy pArray:0x%08x arraySize:%d", pArray, arraySize ); } } while(0); env->DeleteLocalRef( classObj ); } env->DeleteLocalRef( js ); env->ReleaseByteArrayElements(ba, pArray, JNI_ABORT); LOGD( "file dump %x %x %x %x %x %x %x %x %x %x", pBuffer[0], pBuffer[1], pBuffer[2], pBuffer[3], pBuffer[4], pBuffer[5], pBuffer[6], pBuffer[7], pBuffer[8], pBuffer[9] );
0 件のコメント:
コメントを投稿