Вызов функции Objective C из функции C с передачей массива с плавающей точкой - PullRequest
0 голосов
/ 25 октября 2011

Я пытаюсь передать ссылку на массив с плавающей точкой. Проблема заключается в вызове, потому что я занимаюсь разработкой для c, но хочу сделать вызов функции Objective C. Может ли кто-нибудь мне помочь? Как я могу сделать звонок? Там у вас есть код:

bool VideoCamera_Camera(float *buffer) {
    [VideoCameraBinded VideoCamera_CameraUpdateBinded: buffer];
}

Спасибо

Ответы [ 3 ]

1 голос
/ 25 октября 2011

Если у вас есть доступ и вы можете изменить код Objective-C, добавьте туда API C.

В противном случае, если вы действительно не можете изменить код Objective-C, вы можете напрямую использовать среду выполнения Objective-C, но это не рекомендуется:

#include <objc/runtime.h>

objc_msgSend(VideoCameraBinded, // receiver
             sel_registerName("VideoCamera_CameraUpdateBinded:"), // selector
             buffer); // comma separated list of arguments

Вам необходимо связаться с библиотекой времени выполнения Objective C, обычно libobjc:

$ clang mycode.c -lobjc
$ # or cc if you use GCC

Если метод Objective-C ожидает NSArray * вместо float *, вы можете использовать Core Foundation с CFArrayRef. CFArrayRef и NSArray * являются взаимозаменяемыми, но CFArrayRef является типом C, поэтому вы можете использовать его. То же самое касается CFNumberRef и NSNumber *, см. документацию Apple по этому .

1 голос
/ 25 октября 2011

Я собираюсь предположить, что VideoCameraBinded является экземпляром, а не классом.Если я ошибаюсь, пожалуйста, дайте мне знать.

Если у вас есть метод, определенный в классе VideoCameraBinded, что-то вроде этого:

- (void)VideoCamera_CameraUpdateBinded:(float *)buffer {
//...
}

, тогда я не знаю, где ваша проблемаот.Вы получаете конкретную ошибку или другую проблему?

0 голосов
/ 25 октября 2011

Какой тип параметра для VideoCamera_CameraUpdateBinded:?

Если это NSArray, то вы должны выполнить цикл, создать массив и отправить его, как и любой другой метод obj-c. Вам придется хранить плавающие объекты в каких-либо объектах (например, NSNumber).

В противном случае, если функция obj-c принимает число с плавающей запятой *, тогда вам следует идти.

Кстати, разве вы не должны передавать параметр bufferSize тоже?

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