linux java调用vc dll_在Linux下如何使用JNI

在与 Hello.h 相同的路径下创建一个 CPP 文件 Hello.cpp

内容如下:

#include "Hello.h"

#include

// 与 Hello.h 中函数声明相同

JNIEXPORT void JNICALL Java_Hello_SayHello  (JNIEnv * env, jobject arg, jstring instring)

{

// 从 instring 字符串取得指向字符串 UTF 编码的指针

const jbyte *str =

(const jbyte *)env->GetStringUTFChars( instring, JNI_FALSE );

printf("Hello,%s\n",str);

// 通知虚拟机本地代码不再需要通过 str 访问 Java 字符串。

env->ReleaseStringUTFChars( instring, (const char *)str );

return;

}

这里有三个参数,下面讲一下参数用法:

(1)所有的 JNI 调用都使用了 JNIEnv * 类型的指针,习惯上在 CPP 文件中将这个变量定义为 evn,它是任意一个本地方法的第一个参数。env 指针指向一个函数指针表,在 VC 中可以直接用"->"操作符访问其中的函数。(2)jobject 指向在此 Java 代码中实例化的 Java 对象 LocalFunction 的一个句柄,相当于 this 指针。(3)第三个参数就是本地调用中有 Java 程序传进的参数,本例中只有一个 String 型参数。 对于字符串型参数,因为在本地代码中不能直接读取 Java 字符串,而必须将其转换为 C /C++ 字符串或 Unicode。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值