2013-09-24 52 views
11

Tôi đang phát triển ứng dụng Android bằng cách sử dụng jni.
Và tôi đã sử dụng GetStringUTFChars chức năng như sauTham số chức năng GetStringUTFChars

jboolean iscopy; 
const char* trainfile = (env)->GetStringUTFChars(jstr, &iscopy); 

Nhưng tôi thấy một ví dụ khác như thế này

const char *inCStr = (*env)->GetStringUTFChars(env, inJNIStr, NULL); 

Cả hai hoạt động tốt. Nhưng tôi không thể tìm thấy bất kỳ tài liệu nào về ngữ pháp cũ, ngay cả khi nó ngắn gọn hơn.

Tôi có thể tìm tài liệu ở đâu và có sự khác biệt nào giữa chúng không?

+0

Bạn có cân nhắc tư vấn Đặc điểm kỹ thuật của JNI không? Đó là tất cả trong đó. – EJP

Trả lời

12

Ví dụ đầu tiên là cú pháp C++ và sẽ chỉ hoạt động trong các chương trình C++. Thứ hai là dành cho các chương trình C.

Lý do hai khác nhau là trong C++ JNIEnv là một lớp và các hàm là các hàm thành viên của đối tượng env, trong khi trong C JNIEnv là một con trỏ tới một cấu trúc. Vì những gì bạn nhận được như một tham số là một con trỏ tới JNIEnv, trong C bạn phải dereference nó để truy cập vào các thành viên struct, đó là lý do tại sao bạn phải sử dụng *env thay cho env.

Điều này sẽ được đề cập trong bất kỳ văn bản nào về cách sử dụng JNI, nhưng bạn cũng có thể tìm thấy nó bằng cách đọc mã trong tệp tiêu đề.

+0

Cảm ơn sự giúp đỡ và tiết kiệm thời gian của tôi ... –

Các vấn đề liên quan