在 swift 中访问 C 变量
Access C variable in swift
我正在尝试访问 .h 文件中声明的状态变量,但编译器说该变量不存在。我是否需要在桥接头文件中添加任何内容?
在我的 swift 文件中,我无法访问 dstate 或 cstate
编译器在 g722_coder_init(&dstate)
行说 "Use of unresolved identifier '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"
您可以在 c 文件中创建一个函数,并在桥接中添加函数名称作为前向声明 header
例如 -
//In c File you have definition & forward declaration
int g722_encode(short *data, unsigned char *outdata,int len, struct g722_cstate *s );
int g722_encode(short *data, unsigned char *outdata,int len, struct g722_cstate *s ){
}
桥接 header 应该是 -
#import "g722_codec.h"
int g722_encode(short *data, unsigned char *outdata,int len, struct g722_cstate *s );
问题是 struct g722_dstate
是一个 "incomplete type",
并且 Swift 不能导入不完整类型的变量,只能导入变量
指向不完整类型的指针(并且这些是导入的
如 OpaquePointer
).
将完整的结构定义添加到导入的头文件中
是最简单的解决方案。
如果这不可能,那么一种解决方法是添加
#import "g722_codec.h"
static struct g722_dstate * __nonnull dstatePtr = &dstate;
到桥接头文件,它定义了一个包含
"opaque" dstate
变量的地址。这被导入到 Swift 作为
var dstatePtr: OpaquePointer
然后可以使用,例如作为
g722_coder_init(dstatePtr)
我正在尝试访问 .h 文件中声明的状态变量,但编译器说该变量不存在。我是否需要在桥接头文件中添加任何内容?
在我的 swift 文件中,我无法访问 dstate 或 cstate
编译器在 g722_coder_init(&dstate)
行说 "Use of unresolved identifier '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"
您可以在 c 文件中创建一个函数,并在桥接中添加函数名称作为前向声明 header 例如 -
//In c File you have definition & forward declaration
int g722_encode(short *data, unsigned char *outdata,int len, struct g722_cstate *s );
int g722_encode(short *data, unsigned char *outdata,int len, struct g722_cstate *s ){
}
桥接 header 应该是 -
#import "g722_codec.h"
int g722_encode(short *data, unsigned char *outdata,int len, struct g722_cstate *s );
问题是 struct g722_dstate
是一个 "incomplete type",
并且 Swift 不能导入不完整类型的变量,只能导入变量
指向不完整类型的指针(并且这些是导入的
如 OpaquePointer
).
将完整的结构定义添加到导入的头文件中 是最简单的解决方案。
如果这不可能,那么一种解决方法是添加
#import "g722_codec.h"
static struct g722_dstate * __nonnull dstatePtr = &dstate;
到桥接头文件,它定义了一个包含
"opaque" dstate
变量的地址。这被导入到 Swift 作为
var dstatePtr: OpaquePointer
然后可以使用,例如作为
g722_coder_init(dstatePtr)