簡體   English   中英

快速訪問C變量

[英]Access C variable in swift

我正在嘗試訪問.h文件中聲明的狀態變量,但編譯器說該變量不存在。 我是否需要在橋接頭文件中添加任何內容?

在我的快速文件中,我無法訪問dstatecstate

編譯器在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM