我正在尝试将我用 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/