我正在尝试使用Kotlin / native编写libretro内核。 libretro核心由一个C库(动态或静态)组成,该库导出libretro.h中概述的所有功能。我相信这应该是可行的,因为kotlin / native能够导出可以被C程序调用的库,但是我还没有设法使它输出甚至类似于libretro头文件的库。
我最初的方法涉及使用cinterop工具构建klib文件,并希望它可以让我让一个类将标头实现为接口。这并没有工作,因为我已经走向试图让我的科特林代码输出,类似于libretro头文件C头文件。我已经没有用了上述两种方法的任何运气,我一直没能想到的使用纯粹的科特林/原生的另一种方式。
我的代码
val RETRO_DEVICE_NONE: Int = 0
@CName(externName = "hello", shortName = "hello")
fun hello(): String = "Hello, Kotlin/Native!"
@CName(externName = "helloInt", shortName = "helloInt")
fun helloInt(): Int = 123
fun main(args: Array<String>) {
println(hello())
}
将导出到标头后,其外观类似于this。我可以使用@CName批注将函数从默认放置的包结构中取出,但是我仍然遇到函数类型签名,#define宏和枚举(以及其他可能存在的问题),但这些都是到目前为止我遇到的那些)。