ios - 从 C 库调用 objective-c 方法

标签 ios objective-c c cross-platform lib

我有一个用 C (.a) 编写的跨平台库来执行加密工作。

我在安卓上就是这样用的

+------------------------+           +-----------------+
|      Android (Java)    |           |  Android (Java) |
+------------------------+           +-----------------+
   1.|              /|\               3.|           /|\
    \|/            4.|                 \|/         2.|
+------------------------------------------------------+
|                    myFramework.a (C)                 |
+------------------------------------------------------+

所以下面的函数是Java调用的,那么对于与前面的“上下文”无关的东西调用Java

#ifdef __ANDROID__
#include "jni.h"

static JNIEnv *gEnv;
static jobject gObj;

int doStuff(char* aString) { /* have fun calling java */ }

#else

#include "oni.h" // objective c native interface ? :3

#endif

此函数将使用JNIEnvjobject 来访问Java 方法。

我已将 C 库包含在 iOS 项目中,但找不到从 C 库调用 objective-c 方法的方法(第 2 部分和第 3 部分)

如何从 C 库中调用 objective-c 方法?

最佳答案

简短的回答:你不能。 C 无法调用 Objective-C 方法。

也就是说,Objective-C 是 C 的纯超集,因此您可以在 Objective-C 代码中编写 C 函数。这些函数需要有一个纯 C 接口(interface),但在内部它们可以包含 Objective-C 代码。因此,您需要创建一个 C 公共(public)接口(interface)(可以混合使用 C 和 Objective-C 来实现)并从您的 C 库中调用它。

编辑:

实际上,您可以使用用 C 语言编写的 Objective-C 运行时来调用 C 接口(interface)来访问您的 Objective-C 方法。我已经涉足了 Objective-C 运行时,但还不足以流利地了解它。 (此外,我已经在 Swift 中工作了很长时间,现在连我的“ Vanilla ” Objective-C 都变得生疏了。)

关于ios - 从 C 库调用 objective-c 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46958925/

相关文章:

ios - Xcode 6.1 构建在设备上崩溃

ios - swift 3 将字符串颜色转换为cgcolor

ios - 分数+10时随机颜色

ios - 如何通过工具栏按钮替换容器 View ?

Objective-C 使用继承变量和覆盖继承属性

c - 使用 scanf 将变量放入带有 C 的数组中

iOS:使用 UITextField 子类检测空 UITextField 中的退格键

c - rand() 不断返回 0

c - 额外插入 OpenWatcom 内联组装

ios - 从今天开始,SKScene 在 spriteKit 中没有改变