关闭

Java 调用C++

标签: Javac++
371人阅读 评论(0) 收藏 举报
分类:

1. javac, javah

2. Try this! http://www.cnblogs.com/cpcpc/archive/2012/08/13/2636199.html 

3. Release *.dll: 生成->编译(要不报错)->生成解决方案->去找 Release\*.dll

4. Java和C++之间传递string http://www.easymorse.com/index.php/archives/1765

javac TestDLL.java

//javah关键点,一直无法找到类,这样set classpath就可以了 http://bbs.csdn.net/topics/370195082?page=1#post-395485262

set classpath=...\src

javah testDLL.TestDLL

//传string

//头文件 testDLL_TestDLL.h

JNIEXPORT void JNICALL Java_com_liyong_TestNativeCode_TestNativeCode_SendSMS
  (JNIEnv *, jobject, jstring);

//TestDLL.cpp

//一个转换jstring成C string的函数

string jstring2str(JNIEnv* env, jstring jstr) {
        char* rtn = NULL;
        jclass clsstring = env->FindClass("java/lang/String");
        jstring strencode = env->NewStringUTF("UTF8");
        jmethodID mid = env->GetMethodID(clsstring, "getBytes",
                        "(Ljava/lang/String;)[B");
        jbyteArray barr = (jbyteArray) env->CallObjectMethod(jstr, mid, strencode);
        jsize alen = env->GetArrayLength(barr);
        jbyte* ba = env->GetByteArrayElements(barr, JNI_FALSE);
        if (alen > 0) {
                rtn = (char*) malloc(alen + 1);
                memcpy(rtn, ba, alen);
                rtn[alen] = 0;
        }
        env->ReleaseByteArrayElements(barr, ba, 0);
        string stemp(rtn);
        free(rtn);
        return stemp;
}

JNIEXPORT void JNICALL Java_com_liyong_TestNativeCode_TestNativeCode_SendSMS(JNIEnv *env, jobject thiz, jstring JavaString)

{

//JAVA String->C char*的转换

string MyJstr=jstring2str(env,JavaString);
const char*  MyCstr= MyJstr.c_str();

...

}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1953次
    • 积分:49
    • 等级:
    • 排名:千里之外
    • 原创:2篇
    • 转载:1篇
    • 译文:1篇
    • 评论:0条
    文章分类
    文章存档