2017-04-12 5 views
1

J'essaie d'accéder à une variable d'état declare dans le fichier .h mais le compilateur dit que la variable n'existe pas. Ai-je besoin d'ajouter quelque chose dans mon fichier d'en-tête de pontage?Access C variable in swift

Dans mon dossier rapide je ne peux pas accéder à dstate ou Cstate

Le compilateur dit "Utilisation d'identifiant sans solution de« dstate" sur la ligne g722_coder_init(&dstate).

Compiler error

fichier d'en-tête

#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 tête

#import "g722_codec.h" 

Répondre

0

Le problème est que struct g722_dstate est un "type incomplet", et Swift ne peut pas importer des variables d'un type incomplet, seules les variables qui sont les pointeurs vers un type incomplet (et ceux-ci sont importés comme OpaquePointer). L'ajout de la définition de structure complète au fichier d'en-tête importé serait la solution la plus simple.

Si ce n'est pas possible, alors une solution de contournement serait d'ajouter

#import "g722_codec.h" 

static struct g722_dstate * __nonnull dstatePtr = &dstate; 

au fichier d'en-tête de pont, qui définit une variable contenant l'adresse du « opaque » variable dstate. Ceci est importé à Swift

var dstatePtr: OpaquePointer 

et peut ensuite être utilisé par exemple comme

g722_coder_init(dstatePtr) 
0

Vous pouvez faire comme créer une fonction dans le fichier c et ajouter le nom de la fonction que la déclaration en avant pour combler header Pour l'examen 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 ){ 

} 

tête relais devrait être -

#import "g722_codec.h" 
int g722_encode(short *data, unsigned char *outdata,int len, struct g722_cstate *s );