JNI -> 如何包装 c++ void*
JNI -> how to wrap c++ void*
我有一个以void*
为参数的c++函数。如何用java封装它?
C++
void foo(void* data)
{
}
Java
void foo(Object[] data)
{
}
我不确定。请帮忙。
我能想到的(我不太精通该语言)最接近java代码的是
void foo(Byte[] data) {
}
虽然您不知道字节数组的实际大小,但需要从通过JNI调用的foo()
函数中了解这一点。
如果所说的"用java包装它"是指"从java调用它",则需要创建一个java类,并声明一个本地方法。静态更容易,除非您想将java对象作为参数传递:
package my.package;
public class Foo {
public static native void foo(byte[] bytes);
}
其次,在类文件上运行javah。它将生成一个C头,如:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class net_redpoint_utils_Scratch */
#ifndef _Included_net_redpoint_utils_Scratch
#define _Included_net_redpoint_utils_Scratch
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: my_package_Scratch
* Method: foo
* Signature: ([B)V
*/
JNIEXPORT void JNICALL Java_my_package_Scratch_foo
(JNIEnv *, jclass, jbyteArray);
#ifdef __cplusplus
}
#endif
#endif
您需要使用完全相同的名称、签名等来实现该函数。jbyteArray是byte[]参数的JNI类型。
PS:查看SWIG
相关文章:
- 如何在c++17中制作一个模板包装器/装饰器
- std::vector的包装器,使数组的结构看起来像结构的数组
- 如何在c++迭代器类型中包装std::chrono
- 是否可以用"iostream"包装现有的TCP/OOpenSSL会话
- 用pybind11包装C++抽象类时出错
- 为左值和右值的包装器实现C++范围
- C结构,其指针将被包装在unique_ptr中
- 如何包装第三方DLL在R中使用
- 在类型和包装器之间reinterpret_cast是否安全<Type>?
- 将 N-arg 函数包装到另一个函数中
- 元组由 Swig 生成的 Python 包装器返回,用于C++向量
- 包装一个对象并假装它是一个 int
- 使用 Python Extension API 包装复杂C++类
- 外壳包装器句柄/执行交互式命令管道C++ UNIX
- 包装C++类时不完整的类型 GLFWwindow
- 将函数包装器转换为 std::function
- C++函数包装器来捕获某些信号
- 创建包装升压适配器的自定义范围类
- 如何包装(撰写)增强 hana 地图并访问括号运算符(运算符 [])?
- 使用运算符*重载包装矩阵乘法