kotlin native 入门&进阶

kotlin-native03 调用c静态库

2019-06-12  本文已影响0人  hohov

准备工作: 写一个c语言的库

simplelib.h

void hello(void);

char *getString(void);

simplelib.c

#include "simplelib.h"

#include <stdio.h>

void hello(void) {
    printf("Hello, World!\n");
}

char *getString() {
    return "string from c library";
}

正式开始

libraryPaths = D:\\Workplace\\kotlin\\kandc\\interop\\
headers = D:\\Workplace\\kotlin\\kandc\\interop\\simplelib.h
staticLibraries = libsimplelib.a
plugins {
    id 'kotlin-multiplatform' version '1.3.31'
}
repositories {
    mavenCentral()
}
kotlin {
    mingwX64("mingw") {
        compilations.main.cinterops {
            interop
        }
        binaries {
            executable {
               entryPoint = 'sample.main'
                runTask?.args('')
            }
        }
    }
    sourceSets {
        mingwMain {
        }
        mingwTest {
        }
    }
}
build
package sample

import interop.*
import kotlinx.cinterop.toKString

fun main() {
    hello()
    println(getString()?.toKString())
}

运行

编译后的程序 运行exe

和第一篇一样,加上system("pause"),就可以双击运行了

package sample

import interop.*
import kotlinx.cinterop.toKString
import platform.posix.system

fun main() {
    hello()
    println(getString()?.toKString())
    system("pause")
}
双击运行

说明

// IntelliJ API Decompiler stub source generated from a class file
// Implementation of methods is not available

package interop

public fun getString(): kotlinx.cinterop.CPointer<kotlinx.cinterop.ByteVar /* = kotlinx.cinterop.ByteVarOf<kotlin.Byte> */>? { /* compiled code */ }

public fun hello(): kotlin.Unit { /* compiled code */ }

@kotlin.native.SymbolName private external fun kniBridge0(): kotlin.Unit { /* compiled code */ }

@kotlin.native.SymbolName private external fun kniBridge1(): kotlinx.cinterop.NativePtr /* = kotlin.native.internal.NativePtr */ { /* compiled code */ }

所以写kotlin native代码时就可以调用这些数据/函数了

上一篇 下一篇

猜你喜欢

热点阅读