我正在考虑在我的项目中实现KMM。我可以通过androidMain中的JNI引用C代码。但是,我无法在iosMain中使用external fun,因为它使用Kotlin/Native。在现有的iOS项目中,可以从Swift调用Objective-C,并从Objective-C引用C代码。有办法从iosMain引用C++代码吗?
external fun
vawmfj5a1#
可以使用Kotlin/Native的互操作性功能从Kotlin代码调用C函数设置它:1.在单独的.cpp文件+头文件中编写C代码,声明要从Kotlin调用的函数例如:mymodule.cpp
#include "mymodule.h" int add(int a, int b) { return a + b; }
mymodule.h
#ifndef MYMODULE_H #define MYMODULE_H extern "C" { int add(int a, int b); } #endif // MYMODULE_H
1.创建新的Xcode项目+头文件(声明你想要使用的C++函数的C接口)例如:
#ifndef MYMODULE_H #define MYMODULE_H int add(int a, int b); #endif // MYMODULE_H
1.将C++文件添加到Xcode项目中,并作为项目的一部分进行编译1.在KMM项目中--创建Kotlin/Native模块+添加C头文件例如:
kotlin { iosX64("ios") { compilations.main { cinterops { mymodule { defFile("mymodule.def") includeDirs("src/native/include") compilerOpts("-I$projectDir/src/native/include") } } } } }
1.在Kotlin代码中--使用@CName指定C接口函数的名称例如:
import kotlinx.cinterop.* @CName("add") external fun add(a: Int, b: Int): Int fun main() { val sum = add(1, 2) println(sum) }
1条答案
按热度按时间vawmfj5a1#
可以使用Kotlin/Native的互操作性功能从Kotlin代码调用C函数
设置它:
1.在单独的.cpp文件+头文件中编写C代码,声明要从Kotlin调用的函数
例如:
mymodule.cpp
mymodule.h
1.创建新的Xcode项目+头文件(声明你想要使用的C++函数的C接口)
例如:
1.将C++文件添加到Xcode项目中,并作为项目的一部分进行编译
1.在KMM项目中--创建Kotlin/Native模块+添加C头文件
例如:
1.在Kotlin代码中--使用@CName指定C接口函数的名称
例如: