Appel à une méthode Obj-C dans fonction C
respawn
Membre
Re Bonjour, encore moi ;-)
Aujourd'hui, j'essaie d'appeler ma fonction
j'ai essayé des choses telles que
et il me dit que self n'est pas déclaré ...
Aujourd'hui, j'essaie d'appeler ma fonction
- (IBAction)a_disconnect:(id)sender;
dans un cas spécifique traité dans une fonction C
if (connected_socket == -1) {...}
j'ai essayé des choses telles que
[self a_disconnect:nil];<br />[self a_disconnect:self];<br />[a_disconnect:self];
et il me dit que self n'est pas déclaré ...
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Une fonction C peut-être utilisable n'importe où, et donc self n'a pas de sens dans ce contexte.
2 questions :
- d'où est appelée ta fonction ? Depuis une méthode ObjC ?
- quel est le prototype de cette fonction C ?
dans le cas ou je ne peux pas me connecter au socket, je souhaiterait appeler ma méthode .
Ensuite, dans plusieurs autres fonctions C telles que , si la connexion est perdue, je souhaiterai faire appel à cette méthode ...
int connect_card(char *serverhost, unsigned int port, MaClasse * uneInstance)
et dans le code faire
[uneInstance a_disconnect:nil];
-(int) connect_cardWithHost:(constchar *) serverhost port:(unsigned int) port ....
Dans ce type de problème, c'est exactement ce que je fais:
int connect_card(char *serverhost, unsigned int port, Michel * coco)
puis
[coco a_disconnect:nil];
?
mon programme s'appelle "Michel" ???? ???
Reprenons au début : tu as créé quel type de projet ? Une FoundationTool, Une Cocoa-Application, une Document-Based Application , une Core-Data Application ?
Si le nom de ton interface est MyView.h, tu mets MyView *
et pas Michel :brule: :brule: :brule:
Ca plante et ca me ramène dans mon code...
Pour simplifier un peu, je souhaiterai faire [o_progress stopAnimation:nil];
Ceci est réalisé dans ma fonction a_disconnect. Si je met [o_progress stopAnimation:nil]; dans une fonction C, il me dit que ce n'est pas déclaré (alors que dans une méthode Obj-C, pas de pb), et si je redéclare (il l'est deja dans le .h) NSProgressIndicator *o_progress en globale, ca ne marche pas, ça fait rien ...
Mais ta fonction C elle est où
• dans un fichier .c indépendant
• dans une interface .h
• dans un fichier d'implémentation .m ?
Où qu'elle soit, il faut que directement, ou indirectement un #import <Cocoa/Cocoa.h> soit actif , de telle sorte qu'à la compilation la méthode de NSProgressIndicator soit connue.
De plus, comme dit ci-dessus, le prototype doit être
int connect_card(char *serverhost, unsigned int port, NSProgressIndicator * o_progress) {
}
int connect_card(char *serverhost, unsigned int port,MaClasse * object){
...
[o_progress stopAnimation];
...
}
avec o_progress qui serait une des variables/outlets de ton objet object ?
C'est cela ?
Quand j'appelle [o_progress stopAnimation:nil], soit il me dit qu'il le connait pas si je déclare pas en global, alors qu'il est dans le .h, soit ça fait rien ...
• Le nom de ton fichier .h ,
• Les #import fait dans ce fichier .h ,
• L'entête de ta fonction C : int connect_card ( ............. )
• Confirme si o_progress est bien une variable déclarée après @interfaceÂ
Import : #import <Cocoa/Cocoa.h>
#import "MCPKit_bundled/MCPKit_bundled.h"
#import <netdb.h>
Je souhaiterai l'appeler dans la fonction : void check_answer (struct answer *card_answer){}
o_progress est bien déclaré après @interface à la fois dans le .h
C'est la déclaration de ta fonction C qui ne va pas.
Dans la fonction C , mets :
void check_answer (struct answer *card_answer,NSProgressIndicator *progress){
...
[progress stopAnimation];
...
}
Quand tu appelles cette fontion C dans une méthode de l'implémentation de TheApp, tu fais cet appel :
check_answer (card_answer,o_progress);