Java 调用C++

本文介绍如何使用Java和C++进行跨语言编程,特别是如何在两种语言间传递字符串数据。通过具体实例,展示了从Java传递字符串到C++并转换为C++字符串的过程。

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.youkuaiyun.com/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();

...

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值