का उपयोग कर मूल विधियों से शून्य लौट रहा है मेरे पास कुछ मूल कोड है जो जावा पक्ष पर एक jbyteArray (इसलिए बाइट []) देता है और मैं शून्य वापस करना चाहता हूं। हालांकि, अगर मैं jbyteArray के स्थान पर 0 वापस लौटाता हूं तो मैं समस्याओं में भाग लेता हूं।जेएनआई
कुछ अधिक जानकारी: मुख्य तर्क जावा में है, देशी विधि एक बाइट धारा में कुछ डेटा सांकेतिक शब्दों में बदलना करने के लिए प्रयोग किया जाता है। मत पूछो .. इसे इस तरह किया जाना है। हाल ही में, मूल कोड को थोड़ा बदलना पड़ा और अब यह बहुत ही भयंकर धीमी गति से चल रहा है। कुछ प्रयोगों के बाद, जिसमें वापसी से पहले मूल विधि में सभी कोडों को टिप्पणी करने में शामिल था, यह पता चला कि 0 लौटने से मंदी का कारण बनता है। एक वास्तविक jbyteArray लौटने पर, सबकुछ ठीक है।
मेरी कोड के लिए विधि हस्ताक्षर:
सी ++ तरफ:
extern "C" JNIEXPORT jbyteArray JNICALL Java_com_xxx_recode (JNIEnv* env, jclass java_this, jbyteArray origBytes, jobject message)
जावा तरफ:
jbyteArray javaArray;
if (error != ERROR) {
// convert to jbyteArray
javaArray = env->NewByteArray((jsize) message.size);
env->SetByteArrayRegion(java_array, 0, message.size, reinterpret_cast<jbyte*>(message.buffer()));
if (env->ExceptionOccurred()) {
env->ExceptionDescribe();
error = ERROR;
}
}
if (error == ERROR) {
return 0; // Does NOT work - doesn't crash, just slows everything down horrible.
}
else {
return javaArray; // Works perfectly.
}
:
private static native byte[] recode(byte[] origBytes, Message message);
मूल कोड कुछ इस तरह दिखता
कोई भी करता है किसी भी कारण से पता चल सकता है कि यह हो सकता है? क्या यह jbyteArray के स्थान पर मूल विधि से NULL को वापस करने के लिए मान्य है, या जावा पर वापस वापस लौटने के लिए एक और प्रक्रिया है। दुर्भाग्य से, मुझे Google पर कोई भाग्य नहीं था।
धन्यवाद!
संपादित करें: अतिरिक्त जानकारी जोड़ा गया।
आप सरणी के बजाय 0 क्यों लौट रहे हैं? आप बस खाली सरणी क्यों नहीं लौट सकते? कृपया इस मूल पुस्तकालय को क्या करना है इसके बारे में कुछ और जानकारी दें। – amischiefr
क्या आप कुछ कोड पोस्ट कर सकते हैं, कम से कम विधि हस्ताक्षर और ऐसे? –
खैर, मैं विशेष रूप से जावा को "शून्य" प्राप्त करना चाहता हूं, खाली बाइट सरणी नहीं।मैं _could_ उस के साथ काम करने के लिए जावा कोड को फिर से लिखता हूं, लेकिन यदि संभव हो तो मैं वास्तव में नहीं बल्कि वास्तव में नहीं चाहूंगा। मैंने विधि हस्ताक्षर जोड़े। – Dan