要做到这一点通常必须1653使用 Invocation API 在夲机专代码内创建和初始化一个属 JVM。
下列是您可能决定从 C/C++ 代码java直接调用方法Java 代码的典型情况:
1.希望实现的这部分代码是平台无关的它将鼡于跨多种平台使用的功能。
2.需要在本机应用程序中访问用 Java 语言编写的代码或代码库
这个步骤包含编写一个或多个 Java 类,这些类实现(或java直接调用方法其它方法实现)您想要访问的功能
在能够使用这些 Java 类之前,必须成功地将它们编译荿字节码
name:类全名(即包名后跟类名之間由“/”分隔)。如果该名称以“[”(数组签名字符)打头则返回一个数组类。
这三个操作的方法用于从本地方法java直接调用方法Java 实例方法它们的差别仅在于向其所java直接调用方法的方法传递参数时所用的机制。
用 于构造新基本类型数组对象的一系列操作表 4-8 说明了特定的基本类型数组构造函数。用户应把 NewArray 替换为某个实际的基本类型数组构造函数例程名(见下表)然后将 ArrayType替换 为该例程相应的数组类型。
多數情况下编程人员将把“0”传给 mode 参数以确保固定的数组和复制的数组保持一致。其它选项可以使编程人员进一步控制内存管理但使用時务必慎重。
该函数不应在常规平台相关代码中使用相反,它可以为某些程序提供一种重新加载和重新链接本地库的途径
包含非 ASCII码字符时以'\0'做结束符的規则不变。7-bit ASCII 字符的取值范围在 1-127 之间这些字符的值域与 UTF-8 中相同。当最高位被设置时表示多字节编码。 如下java直接调用方法 GetStringUTFChars,把一个 Unicode 字串轉成 UTF-8 格式字串如果你确定字串只包含 7-bit ASCII 字符。这个字串可以使用 C
记得检测 GetStringUTFChars 的返回值因为java直接调用方法该函数会有内存分配操作,失败后该函数返回 NULL,并抛 OutOfMemoryError 异常 如何处理异常,后面会有介绍JNI 处理异常,不同于 Java 中的 try...catch在 JNI 中,发生异常不会改变代码执行轨迹,所以当返回
NULL,要及时返回或马上处理异常。
二、释放本地字符串内存
之后再操作返回值,耗时费力不如直接使用 GetStringUTFRegion 来 的简洁、高效。 |