如何从Objective-C调用C语言函数

3

我目前正在尝试使用FFmpeg在iOS上转换视频。

根据我的需求,我已经修改了他们在transcoding.c中的示例。

我该如何从Objective-C实际调用以下函数:

int mainFunction(int argc, char **argv);

我不确定如何从Objective-C提供参数。非常感谢您的帮助。


我不是100%确定,但我相当肯定你可以直接调用这个函数——即 int tempInt = mainFunction(100,&tempChar) - A O
1个回答

3

Objective-C是C语言的超集,您只需要从Objective-C代码中调用它即可。

 char* args[] = { "foo", "bar", NULL }; // Might need the NULL to emulate command line arguments.
 int result = mainFunction(2, args);

您可以直接从自己的main函数传递argcargv参数。
 int main(int argc, char** argv)
 {
      int result = mainFunction(argc, argv);
 }

如果您的参数是NSString类型的数组,则需要将它们转换为普通的C字符串数组:

char** cStringArray = malloc(([stringArray count] + 1) * sizeof(char*));
for (int i = 0 ; i < [stringArray count] ; ++i)
{
   NSString* aString = [stringArray objectAtIndex: i];
   cStringArray[i] = [aString UTF8String];
}
cStringArray[[stringArray count]] = NULL;
int result = mainFunction([stringArray count], cStringArray);
free(cStringArray);

我很久没有使用Objective-C了,如果有语法错误请见谅。


所以只是好奇,我只看到**NSError一起使用,您能否简单解释一下char* args = {...}作为有效参数的原因? - A O
@AO 这不是有效的,这是一个打字错误。 - JeremyP
嗨@JeremyP,当我使用char* args = { "foo", "bar", NULL };时,Xcode会给我一个警告Excess elements in scalar initializer。你有什么想法为什么会出现这个警告? - martisan
@martisan 因为它是错误的。我的回答中有一个拼写错误,我已经更正了。应该是 char* args[] = { "foo", "bar", NULL }; - JeremyP

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接