java - JNI 我可以使用哪些类型而不是给定的类型(unsigned int、const char*、const wchar_t*、....)

标签 java c++ android java-native-interface

Stackoverflow用户!

我正在尝试将我用 C++ 编写的一些函数转换为 Java。确切地说,我有一个用 C++ 编写的 .so 库,现在我必须从我的 Android 应用程序中调用函数。像这样的函数:

unsignd int Uninitialize();
---------------------------------------
unsignd int DeviceOpen(
    const wchar_t* deviceID,
    unsigned long* phDevice);
---------------------------------------
typedef struct BlobData_s {
     unsigned long     length;
     unsigned char     data[1];
} dsmBlobData_t;

unsignd int Enroll(
    unsigned long       hDevice,
    const char*         userID,
    BlobData_s*         pInputInfo,
    void*               pUserData);

现在你怎么看我有我想用 java 风格编写的函数和 typedef,但我的问题是没有 unsigned int java 类型 ( link )。我知道我可以使用 jint 而不是 int 而不是 char* 我可以使用 jchar* 但是什么我必须做

  • const wchar_t*
  • unsigned long
  • 无符号字符

我可以使用什么来代替那些类型。

我这样试试

jint Java_com_example_testApp_TestApp_DeviceOpen( jchar* deviceID, int* phDevice)
{ 
      return DeviceOpen((const wchar_t*)deviceID, (unsigned long*)phDevice);
}

我说得对吗?*

提前致谢,ViToBrothers。

最佳答案

对于初学者,您必须将您的类型映射到 Java 类型。正如你所说, Java 中没有unsigned,也没有wchar_t。一旦你决定 在 Java 端使用什么类型(例如 int 而不是 unsigned,或者 也许;可能 java.lang.String 用于 char*wchar_t*),您必须使用它们声明您的 native 方法,并且 以将它们映射到您的内部值的方式实现 JNI。

此外,如果您的 C++ 代码使用异常,您必须捕获它们并 在 JNI 接口(interface)中重新映射它们。

对于初学者来说,我会看看是否有一些现有的工具,比如 swig,可以做到 工作。如果没有,我仍然会用它来获取示例代码,然后可以 复制/粘贴和编辑。

关于java - JNI 我可以使用哪些类型而不是给定的类型(unsigned int、const char*、const wchar_t*、....),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5961055/

相关文章:

java - SQLResultSetMapping 在空列的情况下抛出异常

C++ 基础 vector 指派生 vector

android - 如何在 AndEngine 中使用斜体或粗体创建自定义字体?

java - 更新依赖项中的版本时更新模块版本(多模块 maven )

java - Java 中的传出请求速率限制,但具有动态速率

C# 等同于 Java 的 java.awt.image.DataBuffer

android - 使用多个键检索数据 Firebase 实时数据库

c++ - 我的overflow()的实现有什么问题?

c++ - 如何使用引用调用从 C++ 函数中获取 char** 类型变量的值?

android Material 按钮无法去除圆角