передавая ссылку на функцию в тип указателя C, C вызовет функцию - PullRequest
0 голосов
/ 20 декабря 2010

У меня простой вопрос, например, как я могу передать ссылку на функцию target-C в качестве указателя на функцию C, чтобы C мог вызвать эту функцию.

edit: Извините, что не предоставилВот пример источника:

- (void)init {
      CLibStructure cLibObject;
      cLibObject.on_work_done = &cWorkDone;
}

функция, которая будет указывать на on_work_done, будет иметь эту подпись в C

static void cWorkDone(const char *workInfo);

, тогда как в target-C это подпись, которую я сделал

- (void) workDoneWithStatusMessage:(const char *message);

Теперь я хочу указать cLib.on_work_done указатель на функцию target-c, если я указываю на стандартную функцию C, она работает.

Ответы [ 2 ]

3 голосов
/ 20 декабря 2010

Короче, ты не можешь. Не напрямую.

Вызов метода - это комбинация цели, объекта сообщения и селектора, который идентифицирует метод для вызова.

Тебе нужно как-то связать их вместе. С блоками это достаточно просто. С чистыми API C это обычно можно сделать с помощью указателя контекста или чего-то подобного.

Учитывая, что вы не опубликовали ни код, ни примеры, ни API, который нужно использовать, ни подробности о самом API C, предоставить детали сложно.

0 голосов
/ 20 декабря 2010

Вы можете создать функцию, которая вызывает метод, а затем манипулировать указателем на него:

int function(NSObject *something, int someArg)
{
     return [something thisIsAMethod:someArg];
     //assuming NSObject has a method called thisIsAMethod that takes an int as a parameter and returns an int.
}

и тогда вы можете использовать указатель на эту функцию:

int (*pointerToFunction)(NSObject *, int) = &function;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...