【发布时间】: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