gpt4 book ai didi

java - 使用函数指针为 C 结构创建 JNA 映射

转载 作者:行者123 更新时间:2023-11-30 15:16:25 32 4
gpt4 key购买 nike

我正在创建到 OpenMAX 的 JNA 映射C 库。一路上我也在学习 C。我遇到了一个结构体,我不确定如何映射到该结构体,并且我一直无法找到任何资源来提供帮助。

这是结构体的片段

typedef struct OMX_COMPONENTTYPE {    

OMX_VERSIONTYPE nVersion;

OMX_ERRORTYPE (*SetParameter)(
OMX_HANDLETYPE hComponent,
OMX_INDEXTYPE nIndex,
OMX_PTR pComponentParameterStructure);
...

“nVersion”是一个普通成员,很容易在 java 中映射。

我的问题是函数指针SetParameter。 (我认为就是这样)

在 Java 中,结构被映射到 jna.Structure 类的子类。因为这是一个类(而不是接口(interface)),所以我无法定义没有主体的方法头,这就是我映射方法的方式。

有人知道这个映射应该是什么样子吗?

谢谢

最佳答案

JNA 使用Callback表示函数指针的对象,包括 a description of callback usage .

创建一个派生自 Callback 的接口(interface),该接口(interface)实现与您的函数指针相匹配的单个方法。

public class MyStructure extends Structure {    

public MyCallback callback;

public interface MyCallback extends Callback {
void invoke();
}
}

如果您从 native 内存中读取该结构,您将获得一个可用于调用函数指针的代理对象。

从 Java 代码中,您可以为该字段分配一个新值,如下所示:

MyStructure s = ...;
s.callback = new MyCallback() {
public void invoke() {
// your callback implementation here
}
};

关于java - 使用函数指针为 C 结构创建 JNA 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33107101/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com