I'm trying to access a state variable declare in .h file but the compiler said the variable doesn't exist. Do I need to add anything in my bridging header file ?
In my swift file I can't access dstate or cstate
The compiler says "Use of unresolved identifier 'dstate'" on the line g722_coder_init(&dstate)
.
Header file
#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
Bridging Header
#import "g722_codec.h"
The problem is that struct g722_dstate
is an "incomplete type",
and Swift cannot import variables of an incomplete type, only variables
which are pointers to an incomplete type (and those are imported
as OpaquePointer
).
Adding the complete struct definition to the imported header file would
be the easiest solution.
If that is not possible then one workaround would be to add
#import "g722_codec.h"
static struct g722_dstate * __nonnull dstatePtr = &dstate;
to the bridging header file, which defines a variable containing the
address of the "opaque" dstate
variable. This is imported to Swift as
var dstatePtr: OpaquePointer
and can then be used e.g. as
g722_coder_init(dstatePtr)
You can do like create a function in c file and Add function name as forward declaration in bridging header
For example -
//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 ){
}
Bridging header should be -
#import "g722_codec.h"
int g722_encode(short *data, unsigned char *outdata,int len, struct g722_cstate *s );