【问题标题】:Calling a C function from Objective-C and passing specific arguments从 Objective-C 调用 C 函数并传递特定参数
【发布时间】:2020-11-02 08:40:57
【问题描述】:

我必须实现一个 C 函数,该函数将从我无法控制的 Objective-C 应用程序中调用。

该函数将接收一个CVImageBufferRef 结构并返回一个NSMutableArray 结构,其中包含一些整数和一个NSString

我对此有几个问题。

  • 我应该包含哪些 C 头文件才能成功编译? (获取CV... 函数和NS... 类型的声明)

  • 如何处理来自 C 的 NSMutableArray 添加元素并返回它?

  • 如何从 C 中填写 NSStrings ?

欢迎任何帮助。


更新:

不再设想纯 C 包装器。现在我的问题归结为如何将 Objective-C 连接到 Objective-C++ 并处理我提到的特定数据类型。而免费桥具体是什么意思?

【问题讨论】:

  • 我可以挑战这个吗?既然你显然是在实现一个 Objective-C API,为什么不写一个 Objective-C 函数呢?无论如何,NSMutableArray 与 CFMutableArrayRef 和 NSString 与 CFStringRef 是免费桥接的。 developer.apple.com/library/archive/documentation/General/…
  • @TurePålsson:抱歉,我没有客观文化,我发现 Apple 文档非常简洁。所以我无法评估您评论的相关性(这增加了一层困惑)。我不知道Objective-C和标准C的兼容性(告诉你更多,C函数会包装C++代码)。
  • 为什么不用Objective-C++ 包裹C++?这三个(Obj-C、C 和 C++)非常兼容,实现更多的是需求问题。如果您将代码放在 Obj-C 的顶部并包含导入,则甚至不需要包装。也许显示一些代码,然后可能会更清楚您实际需要什么。
  • @ILI:我无法控制此类设计决策。
  • 我认为您不能在 C 文件中导入 - 但是,这是使用objective-c 对象(如NSString 或NSMutableArray)所必需的。它应该是一个 .m 文件,但只包含 C 代码。否则,您应该导入 并用它们的核心基础对应物(CFString 或 CFMutableArray)替换 Objective-C 对象,这在纯 C 文件中是可能的。

标签: ios c objective-c parameter-passing


【解决方案1】:

如果你想远离 Objective-C:

【讨论】:

  • 谢谢,这符合我的需要。但是您链接到的页面对于核心基础类型的内容令人震惊地无效。 (并且没有提到包含文件。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-13
  • 1970-01-01
相关资源
最近更新 更多