本文为笔者在做https://github.com/Nambers/MiraiCP中遇到的坑
kotlin部分
kotlinc
使用kotlinc代替javac命令,需要自己在搜索引擎上下载
函数签名
javap -s 类包路径
查询函数签名,如C:\Program Files\Java\jdk1.8.0_261\bin\javah.exe" org.example.mirai.plugin.CPP_lib
该命令好像不支持>jdk 10
另,也可以使用动态绑定函数,就不用每次用javah生成头文件了
传输类型
在jni中双向传输数据最好都使用jni类型,如果不使用好像编译器也不会报错,如传输long类型用强转转到jlong
协程启动方式之一
runblock{ launch{ 函数() } }
其中runblock是阻塞
launch是启动协程在默认地方
C++部分
JNIEnv
每次调用c++部分都会传入一个JNIEnv*
指针,而该指针所指向的是局部的,相当于在该函数结束后该指针就会失效,而vs的编译器未指明该错误,但是实际运行的时候jvm会报错EXCEPTION