首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何声明在kotlin伴生对象中声明的本地cpp方法?

如何声明在kotlin伴生对象中声明的本地cpp方法?
EN

Stack Overflow用户
提问于 2018-03-29 11:02:57
回答 1查看 1.1K关注 0票数 2

我有一个Kotlin类,它声明了一些Kotlin和C/C++交互的方法:

代码语言:javascript
复制
class JNILib {

    companion object {

        external fun getAppId(): String

        init {
            System.loadLibrary("native-code")
        }
    }
}

但是,在声明本机方法时,我遇到了问题。我试过了

代码语言:javascript
复制
extern "C"
JNIEXPORT jstring JNICALL
Java_com_package_JNILib_getAppId(
        JNIEnv *env, jobject /* this */){
    // wrong
}

extern "C"
JNIEXPORT jstring JNICALL
Java_com_package_JNILib_Companion_getAppId(
        JNIEnv *env, jobject /* this */){
    // wrong
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-29 16:15:54

同伴对象被实现为内部类JNILib$Companion的实例。$必须存在于C++函数的签名中,而你做到这一点的方式则使用转义序列_0XXXX,其中XXXX是unicode字符代码。$的字符代码是十六进制24,即转义序列是_00024,这意味着您的C++函数名变成了Java_com_package_JNILib_00024Companion_getAppId

或者,您可以通过用getAppIdJNILib进行注释,使其成为JNILib的静态方法。然后,您的C++函数名应该是Java_com_package_JNILib_getAppId,带有参数JNIEnv *, jclass (注意jclass而不是jobject,因为getAppId现在是类方法而不是实例方法)。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49554430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档