从传递浮点数组的C函数调用Objective C函数

时间:2011-10-25 14:05:36

标签: objective-c c ios camera

我正在尝试传递浮点数组的引用。 问题是电话,因为我正在为c开发,但我想调用Objective C函数,任何人都可以帮助我吗?我怎么打电话? 你有代码:

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

谢谢

3 个答案:

答案 0 :(得分:1)

我将假设VideoCameraBinded是一个实例,而不是一个类。如果我弄错了,请告诉我。

如果您在VideoCameraBinded的类上定义了一个方法,可以这样:

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

然后我不知道你的问题来自哪里。您是否收到特定错误或其他问题?

答案 1 :(得分:1)

如果您有权访问并可以更改Objective-C代码,请在那里添加C API。

否则,如果您真的无法更改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一起使用。 CFArrayRefNSArray *可以互换,但CFArrayRef是C类型,因此您可以使用它。 CFNumberRefNSNumber *也是如此,请参阅Apple's documentation on this

答案 2 :(得分:0)

VideoCamera_CameraUpdateBinded:的参数类型是什么?

如果它的NSArray那么你必须循环,创建一个数组并像任何其他obj-c方法一样发送它。您必须将浮动内容存储在某种对象中(例如NSNumber)。

否则,如果obj-c函数正在浮动*那么你应该好好去。

顺便说一句,你不应该传递 bufferSize 参数吗?