JNI/NDK開発C/C++典型的基礎知識点
4041 ワード
1.ダイナミックパンツ導入
2.c言語ではメソッドはリロードできません.c++ではメソッドはリロードできます.
3.JNIEnvオブジェクト
4.javaクラスのメソッド/属性の署名を取得する
5.constキーワード定義値が一定でない
6.strcmp(const char*s 1,const char*s 2)比較サイズ
7.パッケージ
8.Void*
9.メモリ四領域モデル
10.マクロ定義関数
11.struct構造体とclassクラスの違い
12.c++のテンプレートクラス使用
開発中にテンプレートクラスtemplateに設計された場合、同じクラスに書くhppファイル=h+cppを宣言し、実装します.
13.c++におけるvector/set集合注意の問題
14.定義済み関数オブジェクトと関数アダプタ
15.c/c++パラメータ伝達
まとめ:c/c++のSTLは集合,反復器,アルゴリズムの分離である.
// path : so , ( data/data/ )。
System.load(path);
//path lib so 。
System.loadLibrary(path);
2.c言語ではメソッドはリロードできません.c++ではメソッドはリロードできます.
3.JNIEnvオブジェクト
JNIEnv: c ( ), c++ ( )。
JNIEnv 。
4.javaクラスのメソッド/属性の署名を取得する
java /
javap -s xxx.class
android studio cd
build/intermediates/classes/…
or
build/intermediates/javac/debug/compileDebugJavaWithJavac/classes...
5.constキーワード定義値が一定でない
const int a;
int const a;
a 。
const int *a;
int * const a;
。
*a , , a , ( )
6.strcmp(const char*s 1,const char*s 2)比較サイズ
:extern int strcmp(const char *s1,const char * s2);
:#include
: s1 s2。
:
s1s2 , >0
7.パッケージ
#include
#include "xxx.h" c/c++
8.Void*
Void
Void i;// ,
Void* i // ,
9.メモリ四領域モデル
: , ,
; , malloc-free, new-delete
: ,
:
10.マクロ定義関数
1. , , 。
#define N 5; // , N 5;
:#define MAX(a,b) ((a)>(b)?(a):(b))
: MAX(a,b) { return a>b?a:b;}
:
#define Jin(NAME) java_jin_##NAME
std::string java_jin_wirte(char* c){
return c;
}
std::string java_jin_read(char* c,int a){
return c;
}
extern "C"
JNIEXPORT jstring JNICALL
Java_com_example_ts_javatoc_MainActivity_getJin(JNIEnv *env, jobject instance) {
std::string hello = Jin(read)(" ",2);
return env->NewStringUTF(hello.c_str());
}
11.struct構造体とclassクラスの違い
1. C STRUCT , 。 C++ C ,
, STRUCT , STRUCT
。STRUCT , , 。
2. : STRUCT PUBLIC ,CLASS PRIVATE,
STRUCT CLASS, , PUBLIC,PRIVATE,PROTECTED
。 , 。
:
CLASS A { INT A=0;// , };
3. struct , c++ , class。
12.c++のテンプレートクラス使用
開発中にテンプレートクラスtemplateに設計された場合、同じクラスに書くhppファイル=h+cppを宣言し、実装します.
#ifndef JAVATOC_TESTT_HPP
#define JAVATOC_TESTT_HPP
template
class MyTemplateName{
private:
T index;
char *x;
public:
MyTemplateName();
T getIndex();
void setIndex(T dex);
//
~MyTemplateName();
};
#endif //JAVATOC_TESTT_HPP
template
// -- MyTemplateName
MyTemplateName::MyTemplateName() {
}
template
void MyTemplateName::setIndex(T dex) {
this->index = dex;
}
template
T MyTemplateName::getIndex() {
return this->index;
}
13.c++におけるvector/set集合注意の問題
c++ vetcor set
using namespace std; , vector :
#include
#include
using namespace std;
vector sv;
sv.push_back("s");
sv.pop_back();
set set1;
,
std::vector<:string> sv;
sv.push_back("s");
sv.pop_back();
std::set<:string> set1;
14.定義済み関数オブジェクトと関数アダプタ
: , , , , , (c++ )
:foreach,transform( ),
:find,find_if,
:count,count_if,
:megre,
:sort,
:random_shuffle ,copy,replace
:bind2nd()
:https://www.cnblogs.com/smh2015/p/9656648.html
15.c/c++パラメータ伝達
c/c++ ( ) / , , object :
:
Bitmap2mat(JNIEnv *env, Mat *mat)
Bitmap2mat(JNIEnv *env, Mat &mat)
:
Bitmap2mat(JNIEnv *env, Mat mat)
まとめ:c/c++のSTLは集合,反復器,アルゴリズムの分離である.