仓颉语言调用.net9 C#编写的dll
仓颉语言调用.net9 C#编写的dll
目录
仓颉语言简介

仓颉编程语言是由华为打造一款面向全场景智能的新一代编程语言,主打原生智能化、天生全场景、高性能、强安全。主要应用于鸿蒙原生应用及服务应用等场景中,为开发者提供良好的编程体验。
小试牛刀
作为一名dotnet开发人员,最近又接触到了仓颉语言。突发奇想能不能将两者联动一下,于是有了本篇内容。
仓颉安装
到仓颉官网[1]下载SDK包,解压后添加一下Path环境变量即可,详细的可看安装指南[2],此处不多加赘述。
之后,再到VSCode的插件商店搜索Cangjie安装,再配置一下插件的SDK路径,环境就算是配置完成了。
准备C#的类库项目
1. 新建一个类库项目CSLibrary
2. 写点代码Hello.cs
namespace CSLibrary;
public static class Hello
{
public static string SayHello(string name)
{
return $"Hello, {name}! My name is CSLibrary.Hello";
}
}
这里的思路是通过P/Invoke手法导出原生C接口,让仓颉调用,所以
Hello.cs要这样修改下
using System.Runtime.InteropServices;
namespaceCSLibrary;
publicstaticclassHello
{
[UnmanagedCallersOnly(EntryPoint = "sayhello")]
public static IntPtr SayHello(IntPtr namePtr)
{
// 将非托管字符串指针转换为C#字符串
string? name = Marshal.PtrToStringUTF8(namePtr);
string greeting = $"Hello, {name}! My name is CSLibrary.Hello";
// 将C#字符串转换为非托管UTF-8字符串指针
IntPtr resultPtr = Marshal.StringToCoTaskMemUTF8(greeting);
return resultPtr;
}
}
之所以如此修改是因为非托管函数只能使用非托管兼容的类型(如基本数值类型、指针或结构体),而C#中的
string是托管类型。
3. 修改CSLibrary.csproj启用AOT编译
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<OutputType>Library</OutputType>
<PublishAot>true</PublishAot> <!-- 启用AOT编译 -->
</PropertyGroup>
</Project>
4. 发布为原生DLL
dotnet publish -c Release -r win-x64
这样我们就得到了一个CSLibrary.dll,放着备用。
编写仓颉代码
在之前配置好的VSCode环境中,按下ctrl+shift+p,输入Create Cangjie Project,按照提示一路下去就可以创建一个仓颉工程项目
修改main.cj里面的代码
package CJinvokedotnet
// declare the function by `foreign` keyword
foreign func sayhello(namePtr: CString): CString
main(): Int64 {
println("hello world")
// call this function by `unsafe` block
unsafe {
var name = LibC.mallocCString("算神")
var greeting = sayhello(name)
println(greeting)
LibC.free(name)
}
return0
}
把刚才得到的CSLibrary.dll放到main.cj的同级目录下
使用以下命令进行编译
cjc -L . -l CSLibrary ./main.cj
运行生成的main.exe可得到以下结果
hello world
Hello, 算神! My name is CSLibrary.Hello
一键体验
-
Clone本项目
https://github.com/lishewen/CJinvokedotnet -
使用
build.bat一键生成C#和仓颉的项目 -
运行
main.exe
引用链接
[1] 仓颉官网: https://cangjie-lang.cn/download[2] 安装指南: https://cangjie-lang.cn/docs?url=%2F1.0.0%2Fuser_manual%2Fsource_zh_cn%2Ffirst_understanding%2Finstall_Community.html
更多推荐



所有评论(0)