我正在尝试访问 .h 文件中声明的状态变量,但编译器说该变量不存在。我是否需要在桥接头文件中添加任何内容?
在我的 swift 文件中,我无法访问 dstate 或 cstate
编译器在 g722_coder_init(&dstate)
行显示“使用未解析的标识符‘dstate’”。
头文件
#ifdef __cplusplus
extern "C" {
#endif
extern struct g722_dstate dstate;
extern struct g722_cstate cstate;
int g722_coder_init ( struct g722_cstate *s );
int g722_encode(short *data, unsigned char *outdata,int len, struct g722_cstate *s );
int g722_decoder_init ( struct g722_dstate *s);
int g722_decode(unsigned char *decdata, short *pcmout, int len, struct g722_dstate *s );
#ifdef __cplusplus
}
#endif
桥接头
#import "g722_codec.h"
最佳答案
问题是 struct g722_dstate
是一个“不完整的类型”,
而 Swift 不能导入不完整类型的变量,只能导入变量
这是指向不完整类型的指针(并且那些是导入的
作为 OpaquePointer
)。
将完整的结构定义添加到导入的头文件中 是最简单的解决方案。
如果那不可能,那么一种解决方法是添加
#import "g722_codec.h"
static struct g722_dstate * __nonnull dstatePtr = &dstate;
到桥接头文件,它定义了一个包含
“不透明”dstate
变量的地址。这被导入到 Swift 中作为
var dstatePtr: OpaquePointer
然后可以使用,例如作为
g722_coder_init(dstatePtr)
关于swift - 快速访问C变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43365067/