Java 如何在C++;使用JNI
我需要调用java代码,然后使用jnI返回C++中的字符串。p>Java 如何在C++;使用JNI,java,c++,java-native-interface,Java,C++,Java Native Interface,我需要调用java代码,然后使用jnI返回C++中的字符串。p> 基本上,在C++中,我想使用一个函数,比如“代码>”字符串GETMyString()“< /Cord>”,从java中获取一些字符串。我怎样才能得到它?下面是我的包装器,返回std::wstring。请注意,它使用“关键字符串” C++impl: JNIEXPORT void JNICALL Java_bla_bla_bla_bla_log_1message (JNIEnv *env, jclass, jstring cate
<>基本上,在C++中,我想使用一个函数,比如“代码>”字符串GETMyString()“< /Cord>”,从java中获取一些字符串。我怎样才能得到它?下面是我的包装器,返回std::wstring。请注意,它使用“关键字符串” C++impl:
JNIEXPORT void JNICALL Java_bla_bla_bla_bla_log_1message
(JNIEnv *env, jclass, jstring category, jstring message, jint level)
{
jniCriticalString pCat(env, category);
if( !pCat.is_valid() )
return;
jniCriticalString pMsg(env, message);
if( !pMsg.is_valid() )
return;
std::wstring lCat(pCat.c_str(), pCat.length());
std::wstring lmessage(pMsg.c_str(), pMsg.length());
OP::Logging::instance().log_message(lCat, lmessage, (OP::Logging::LogLevel)level);
}
返回字符串的C++方法使用了另一种技巧:
Java_bla_bla_bla_getName(
JNIEnv *env, jclass operationClass, jlong handler )
{
std::wstring retval = ...
//.. code to resolve std::wstring
return env->NewString(
(const jchar*)retval.c_str(),
(jsize)retval.length());
}
您能否举例说明如何定义和初始化用于此用途的特定jmethodID,然后如何使用它调用java函数,然后返回字符串?@rantravee-刚刚添加samples@StockB方法Java_bla_bla_bla_log_1带有参数“category”的消息按您的要求执行。同样的技术也可以用于返回值。签名将是
jstring Java_bla_bla_bla_bla_log_1message
std::string的可能副本,请查看此处:-此外,确保将std::string
转换为char*
-std::string str=“string”;const char*cstr=str.c_str()代码>
JNIEXPORT void JNICALL Java_bla_bla_bla_bla_log_1message
(JNIEnv *env, jclass, jstring category, jstring message, jint level)
{
jniCriticalString pCat(env, category);
if( !pCat.is_valid() )
return;
jniCriticalString pMsg(env, message);
if( !pMsg.is_valid() )
return;
std::wstring lCat(pCat.c_str(), pCat.length());
std::wstring lmessage(pMsg.c_str(), pMsg.length());
OP::Logging::instance().log_message(lCat, lmessage, (OP::Logging::LogLevel)level);
}
Java_bla_bla_bla_getName(
JNIEnv *env, jclass operationClass, jlong handler )
{
std::wstring retval = ...
//.. code to resolve std::wstring
return env->NewString(
(const jchar*)retval.c_str(),
(jsize)retval.length());
}