我们在 Java 项目中使用了一些 C 库。几年前,其他一些几年前退休的开发人员(一如既往)为我们创建了所有包装器。包装器是由 swig 生成的,但接口(interface)文件现在丢失了。
库及其包装器的基本思想如下:
- 只有一个函数返回指向某个复杂对象的指针。并且有该函数的包装器。
- 复杂对象是一个树状结构,有数十种节点种类和类型(C 结构)用于表示它们。每种类型的每个字段都有数百个包装器,我们正在尝试全部使用它们。
该库前段时间已更新,现在有一些我们尚未意识到但想要使用的新数据。这些数据包含在我们调用的函数创建的对象间接包含或引用的一些对象中(添加了一些新字段和类型)。
我知道我不应该手动对包装器进行任何更改,而应该修改接口(interface),但正如我已经写的那样,它丢失了。现在我只想生成一些添加/更改的类型的包装器,并将它们添加到我们的旧包装器中,但稍后我想开始创建接口(interface)文件,该文件将定义“应该包装什么以及如何包装”。
我们所需的所有定义都在单个头文件中定义。是否可以告诉 swig 为该 header 中的每种类型生成包装器?如果是这样,我该如何编写这样的接口(interface)文件?
最佳答案
来自swig tutorial :
As it turns out, it is not always necessary to write a special interface file. If you have a header file, you can often just include it directly in the SWIG interface. For example:
%module example
%{
/* Includes the header in the wrapper code */
#include "header.h"
%}
/* Parse the header file to generate wrappers */
%include "header.h"
关于java - 定义一个 swig 接口(interface)文件,用于从某个头文件生成每种类型的包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2772487/