Fonction Pure C appelant la méthode Objective-C?

D’accord, j’ai lu une demi-douzaine de sujets à ce sujet, mais aucune des solutions ne semble répondre aux besoins exacts.

Question:

Comment une fonction Pure C (.c) appelle-t-elle une méthode dans une classe Pure Objective-C (.m)?

Chaque exemple / réponse utilise C dans une méthode Objective-C (.m). J’ai une bibliothèque Pure C pour laquelle je dois créer un simulateur, je dois donc garder mon kernel en C pur et appeler mes méthodes d’émulation de niveau supérieur dans Objective-C.

Toute tentative de création d’une référence et d’appel d’une méthode échoue. La notation entre crochets échoue également. Créer une variable globale dans Obj-C et essayer de l’utiliser dans Pure-C ne fonctionne pas, comme si l’espace de nom était séparé.

Quelqu’un a fait ça?

Voici un diagramme du stream:

Obj-C UIButton CLICKED-> Appelle la méthode Obj-C-> Appelle la fonction C-> Appelle la méthode Obj-C

Après de nombreuses expériences, j’ai découvert que la façon la plus élégante de résoudre mon problème était de transformer ma bibliothèque C en kernel en un NSObject utilisant le suffixe .m. La méthode de rappel en arrière s’est résolue instantanément. Cette modification modifie ma bibliothèque d’origine, mais elle est tout à fait gérable. Donc, pour passer en revue:

Mon fichier C d’origine a été renommé pour utiliser le suffixe .m. Puis j’ai ajouté

 @interface myCLibrary : NSObject @end 

dans mon fichier .h et ajouté à mon ancien fichier .c, maintenant renommé .m.

 @implementation myCLibrary @end 

Rappelez-vous simplement que les fonctions C ne doivent pas être collées entre ces déclarations d’interface / implémentation, en dessous d’elles. Seul Objective-C doit entrer dans ces déclarations. Une fois que j’ai fait cela, appeler les fonctions C et rappeler BACK vers d’autres fonctions C a très bien fonctionné.

Merci pour toute l’aide malgré tout.

Objective C peut comstackr la méthode c sans aucune modification. Pour appeler la méthode c à partir de la classe objective-c, vous devez faire ce que vous faites dans c. Incluez simplement le fichier d’en-tête, puis appelez directement la méthode. Supposons que vous avez un en-tête C nommé test.h et que vous avez une méthode sum(int i, int j); puis commencez par inclure test.h, puis appelez test(1, 2);

Si vous souhaitez appeler une méthode C ++, utilisez Objective-C ++ (extension .mm) de la même manière que celle décrite ci-dessus.

J’espère vous avoir bien compris!

Vous pouvez le faire via la fonction de rappel.

Dans votre fichier C, utilisez ceci:

Définir le type de rappel

 eventcallback g_callback; 

Implémente la classe de rappel (exécutée par le code objective-c)

 void comm_set_callback(eventcallback callback){ g_callback = callback; } 

dans objective-c:

Définissez le rappel (par exemple, dans viewDidLoad ())

 comm_set_callback(&testfkt); 

Méthode C appelée depuis la fonction C externe

 void testfkt(){ [refToSelf testmethod]; } 

Méthode Objective-C appelée à partir de la méthode C testfkt

 -(void)testmethod{ ... }