我正在尝试传递浮点数组的引用。 问题是电话,因为我正在为c开发,但我想调用Objective C函数,任何人都可以帮助我吗?我怎么打电话? 你有代码:
bool VideoCamera_Camera(float *buffer) {
[VideoCameraBinded VideoCamera_CameraUpdateBinded: buffer];
}
谢谢
答案 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
一起使用。 CFArrayRef
和NSArray *
可以互换,但CFArrayRef
是C类型,因此您可以使用它。 CFNumberRef
和NSNumber *
也是如此,请参阅Apple's documentation on this。
答案 2 :(得分:0)
VideoCamera_CameraUpdateBinded:
的参数类型是什么?
如果它的NSArray那么你必须循环,创建一个数组并像任何其他obj-c方法一样发送它。您必须将浮动内容存储在某种对象中(例如NSNumber
)。
否则,如果obj-c函数正在浮动*那么你应该好好去。
顺便说一句,你不应该传递 bufferSize 参数吗?