2009-06-13 16 views
3

Je développe des applications iPhone, et après la mise à jour vers SDK 3.0, j'obtiens une erreur sur CFWriteStreamCreateWithFTPURL lors de la liaison. C'est le code que j'appelle pour obtenir l'erreur.Extern C fonctions dans Objective-c

streamInfo.writeStream = CFWriteStreamCreateWithFTPURL(NULL, urlRefWrite); 

J'ai une idée qu'il peut être résolu en utilisant extern « C », mais après avoir googlé, je n'ai pas trouvé la solution à mon problème. Des idées?

Merci à l'avance

+1

Pouvez-vous nous donner le message d'erreur? – UncleO

+1

Je n'ai pas 3.0 sur la machine que je suis en train de faire, mais tout de suite, est-ce que vous établissez des liens avec CoreServices? – zpasternack

+0

J'ai trouvé le problème - j'ai créé un nouveau projet et copié toutes mes classes dans ce projet, mais j'ai oublié d'inclure les frameworks que j'utilisais. Donc, ce qui a résolu le problème, était de les inclure - simple comme ça :) –

Répondre

3

Vous ne devriez jamais avoir à utiliser extern "C" dans un projet Objective-C. C'est parce que Objective-C est un sur-ensemble strict de C.

7

extern "C" peut faire l'affaire. Je suis capable de compiler et de lier des fonctions C en faisant quelque chose comme ça autour de la déclaration de l'implémentation et du fichier d'en-tête. Voici un exemple simple:

 


#if __cplusplus 
extern "C" { 
#endif 

/// converts a degree value to radians 
double DegreesToRadians(double degrees); 

/// converts radian value to degrees 
double RadiansToDegrees(double radians); 


#if __cplusplus 
} // Extern C 
#endif 

 

fichier de mise en œuvre:

 

#import "Math.h" 

#if __cplusplus 
extern "C" { 
#endif 


double DegreesToRadians(double degrees) {return degrees * M_PI/180;}; 
double RadiansToDegrees(double radians) {return radians * 180/M_PI;}; 


#if __cplusplus 
} //Extern C 
#endif