[英]Access C variable in swift
我正在嘗試訪問.h文件中聲明的狀態變量,但編譯器說該變量不存在。 我是否需要在橋接頭文件中添加任何內容?
在我的快速文件中,我無法訪問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)
您可以像在c文件中創建函數,然后在橋接標頭中將函數名稱添加為前向聲明一樣,例如-
//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 ){
}
橋接標頭應為-
#import "g722_codec.h"
int g722_encode(short *data, unsigned char *outdata,int len, struct g722_cstate *s );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.