我有一个用 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
此函数将使用JNIEnv 和jobject 来访问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/