Как вызвать функцию target-C из функции C - PullRequest
2 голосов
/ 07 августа 2010

Я пытаюсь вызвать функцию target-C из функции C, но код продолжает падать в objc_msgSend.

Мой класс target-C является одноэлементным, и я использую следующий код:

void c_function(int arg0, const char *arg1)  
{  
   [[objc_class instance] testFunction:arg0 Arg1:arg1];  
}

GDB показывает, что происходит сбой при вызове функции target-C.Как я могу вызвать функцию target-C из функции ac?

Спасибо

Ответы [ 3 ]

2 голосов
/ 07 августа 2010

В вашем коде нет ничего плохого, поскольку нет специальных правил для вызова методов objc из функций c. Если в objc_msgSend произошел сбой, обратитесь к http://www.sealiesoftware.com/blog/archive/2008/09/22/objc_explain_So_you_crashed_in_objc_msgSend.html. То же самое произошло бы, если бы строка objc была в другом коде objc - скорее всего, вы забыли сохранить общий экземпляр своего синглтона.

0 голосов
/ 07 августа 2010

1

@interface class2 {

}

-(void) testFunction:(int)count Arg1:(const char *)args;

@end

2

@include "class2.h"

@interface objc_class {

}

-(class2*) instance;

@end 

3

@include "class2.h"

@interface objc_class {

}

+(class2*) instance; // be aware of the fact, instance (normally) does not
                     // have access to any instance variables!
0 голосов
/ 07 августа 2010

[[objc_class instance] testFunction:arg0 Arg1:arg1];

Поскольку вы не предоставляете дополнительную информацию:

objec_class является экземпляром, ваш синглтон?И это обрабатывает сообщение экземпляр ?…

или

objec_class действительно класс, имеющий метод класса instance ?И это даст вам еще один экземпляр ...

Другими словами, действительно ли у вас есть что-то вроде

@interface class2 { } -(void) testFunction:(int)count Arg1:(const char *)args; @end

и

@include "class2.h" @interface objc_class { } -(class2*) instance { } -(void) testFunction:(int)count Arg1:(const char *)args; @end

или

@include "class2.h" @interface objc_class { } +(class2*) instance; // be aware of the fact, instance (normaly) does not have // access to any instance variables!

для включения?

Ваш код не выглядит как «эй, объект (экземпляр) синглтон, я вам говорюв «экземпляр».Затем я беру ваш ответ и выдаю ему сообщение «testFunction: Arg1:» (с некоторыми вставленными значениями) »!

(Вы уверены, что поняли цель c?)

Привет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...