JNI呼び出しCとC++の違い

1129 ワード

JNI呼び出しCとC++の違い
  • JNIはC言語でインタフェースを定義し、JNIは関数名を通じて関数エントリを探し、関数の内容を実行する.これは関数がどの言語で生成されるかとは関係ありません.関数名がJNIのプロトコルに合致することを保証します.C++を使用するには、C++のデフォルトで生成された関数名とソースファイルに書かれた名前が異なることに注意してください.C++は関数のリロードを処理するため、関数名にパラメータ情報を追加します.これをname manglingと呼びます.解決策は,関数を定義する際にextern「C」修飾を加え,コンパイラにこの関数をCで呼び出すように伝えることである(もちろん,実はJNIである).本质は何の区别もなくて、1つはJNI调Cで、1つはJNI调Cで、Cは更にC++を落として、このように理解するのは简単です~
  • Cの定義ではenvは2段のポインタであり、C++の定義ではenvは1段のポインタである.C形式ではenvポインタを二重deferencingする必要があり,envを最初のパラメータとしてjni関数に渡す必要があり,簡単な例を挙げると
  • である.
    eg:
  • はXXXに対して.c:JNI関数呼び出しは「(*env)->」でプレフィックスされ、関数ポインタが参照する値を取り出すことを目的としています.
    return (*env)->NewStringUTF(env,"HelloJNI!");  
  • はXXXに対して.cpp:JNIEnvクラスには、関数ポインタ検索を処理するインラインメンバー関数があります.
    return env->NewStringUTF("HelloJNI!"); 
  • では、CまたはC++の実装は類似しているが、envの動作方法が異なるため、CとC++を用いて同じJNI方法を実装することができ、それらの違いは主にenvの動作に集中し、他は類似した
  • である.
    転載先:https://www.cnblogs.com/mamamia/p/11398311.html