Appeler une fonction C ++ depuis Swift

Comment appeler une fonction C ++ (aucune classe impliquée) à partir d’un fichier Swift? J’ai essayé ceci:

Dans someCFunction.c :

void someCFunction() { printf("Inside the C function\n"); } void aWrapper() { someCplusplusFunction(); } 

Dans someCpluplusfunction.cpp :

 void someCplusplusFunction() { printf("Inside the C++ function"); } 

Dans main.swift :

 someCFunction(); aWrapper(); 

Dans Bridging-Header.h :

 #import "someCFunction.h" #import "someCplusplusFunction.h" 

J’ai trouvé cette réponse très informative, mais je ne peux toujours pas la faire fonctionner. Pourriez-vous me diriger dans la bonne direction?

Merci!

À quoi ressemble l’en-tête?

Si vous souhaitez définir explicitement le type de liaison pour les fonctions compatibles C en C ++, vous devez indiquer au compilateur C ++ ce qui suit:

 // cHeader.h extern "C" { void someCplusplusFunction(); void someCFunction(); void aWrapper(); } 

Notez que ce n’est pas du code C valide, vous devez donc envelopper les déclarations extern "C" dans des macros de préprocesseur.

Sous OS X et iOS, vous pouvez utiliser __BEGIN_DECLS et __END_DECLS autour du code que vous souhaitez associer en tant que code C lors de la compilation de sources C ++, sans avoir à vous soucier de l’utilisation d’une autre astuce de préprocesseur pour qu’il s’agisse d’un code C valide.

En tant que tel, cela ressemblerait à:

 // cHeader.h __BEGIN_DECLS void someCplusplusFunction(); void someCFunction(); void aWrapper(); __END_DECLS 

EDIT: Comme l’éphémère l’a mentionné, vous pouvez utiliser les macros de préprocesseur suivantes:

 // cHeader.h #ifdef __cplusplus extern "C" { #endif void someCplusplusFunction(); void someCFunction(); void aWrapper(); #ifdef __cplusplus } #endif