在仓颉语言中调用C/C++动态库
前言
仓颉语言的试用通过了,看了一下仓颉的语法,整体还是还可以的,融入不少语言的特性的,因为仓颉语言目前来说是没有什么生态的,所以更多的时候,还是调用C/C++生态,这里只是学习调用C/C++动态库C语言代码,并生成动态库
_declspec(dllexport) int _stdcall add(int64_t a, int64_t b)
{
return a + b;
}
_declspec(dllexport) void _stdcall cprint(char* msg)
{
printf("%s\n", msg);
}
仓颉调用C语言动态库(Windows)
// from std import random.* //早期版本引入包的语法
import std.random.* //在0.53.4之后,可以这样引入包
//foregin 声明外部函数
foreign func add(a: Int64, b: Int64): Int64
foreign func cprint(msg: CString): UInt64
main() {
let num = Random().nextInt32();
println("num=${num}")
unsafe {
var sum: Int64 = add(10, 20); //调用C动态库中add函数
println("c add func exec result = ${sum}");
var msg: CString = LibC.mallocCString("hello cangjip"); //声明一个c语言字符串
var num: UInt64 = cprint(msg); //将字符串通过cprint函数传达到C语言动态库中
print("${num}");
LibC.free(msg); //释放msg字符串
}
return 0
}
编译命令:
# -L(要链接的文件路径) .(当前目录) -l (指定链接库) DllApp(动态库的名称)
cjc .\hello.cj -L . -l DllApp -o hello.exe
秋风
2024-07-14