2017-04-12 8 views
1

私は状態変数宣言にアクセスしようとしていますが、コンパイラは変数が存在しないと言っています。ブリッジヘッダーファイルに何かを追加する必要がありますか?私の迅速なファイルで即座にC変数にアクセス

私はDSTATEまたはCSTATEにアクセスすることはできません

コンパイラはラインg722_coder_init(&dstate)の "未解決識別子 'DSTATE' の使用を" と言います。

Compiler error

ヘッダファイル

#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" 

答えて

0

問題は、struct g722_dstate「が不完全型」であることである とスウィフトは不完全型の変数、のみ変数 をインポートすることはできませんポインタが不完全な型に変換されます( はOpaquePointerとしてインポートされます)。

インポートされたヘッダーファイルに完全な構造体定義を追加すると、 が最も簡単な解決策になります。

それが不可能である場合、1つの回避策は、「不透明」dstate変数の アドレスを含む変数を定義するブリッジヘッダファイルに

#import "g722_codec.h" 

static struct g722_dstate * __nonnull dstatePtr = &dstate; 

を追加することであろう。これはSwiftにインポートされ、

var dstatePtr: OpaquePointer 

として使用できます。 as

g722_coder_init(dstatePtr) 
0

Cファイル内の関数を作成し、ブリッジングで前方宣言と関数名を追加しますようにあなたが行うことができますヘッダー 試験のためPLE - ヘッダがなければならないブリッジ

//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 ); 
関連する問題