java里的 char和 C的char完全不是一回事
java里你要写 stringjava_encryptpswd(string Password, string EncryptedKey )
生成的 C头文件,应该是 jstring java_encryptpswd(JEnvi* pEnvi,jstring Password,jstring EncryptedKey)
我手写的,没查资料,大概是这样。。
后面两个是java里字符串结构,在C里面的表示法, 其实它就是指针而已。
然后你可以用pEnvi里的函数,将java的string,转化成 c的string。
然后调用 C的头文件的函数,得到结果,在组装成java的字符串。
比如例子:
我要用C来实现 java的字符串定位。
No.1 定义java的本地接口
public native String NAConvert(String arg1,String arg2)
No.2 生成头文件
JNIEXPORT jstring JNICALL Java_com_test_mainandroid_MainAndroidNative_NAConvert
(JNIEnv *, jobject, jstring, jstring)
No.3 自己创建一个实现文件,实现上面函数
jstring Java_com_test_mainandroid_MainAndroidNative_NAConvert
(JNIEnv* env, jobject obj, jstring arg1, jstring arg2)
{
jsize len = env->GetStringLength(arg1)
jchar* pBuf = new jchar[len+1]
env->GetStringRegion(arg1,0,len,pBuf)
jclass m = env->FindClass("java/lang/String")
jmethodID mid = env->GetMethodID(m,"charAt","(I)C")
jchar c = env->CallCharMethod(arg1,mid,1)
return arg1
}
第一个是虚拟机事例指针,第二个参数是接口方法所在对象的 this。
第三个及以后才是你的接口的参数。
java里传入的所有对象参数,在C里面都是句柄。必须要用第一个参数env才能解析其中含义。
Windows先调用C++ 用C++加载.net类库 然后获取委托对应C++函数指针Linux下的没有做过
不过微软已经有Linux下的框架了
具体你可以去看在Linux下如何用C++加载类库以及Linux下。net宿主结构
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)