[的用别的方式]跨语言调用C#代码的新方式-DllExport

上一则该文采用C撰写三个.NET解析器该文正式发布之后,许多爸爸妈妈都对最捷伊NativeAOT表达式求出较为钟爱,那时故写一则引言来如是说呵呵怎样采用它。

在从前,假如有其它词汇须要初始化C撰写的库,那大体上多于透过各式各样RPC的形式(HTTP、GRPC)或是导入几层C++全权层的形式来初始化。

好景不长谷歌已经开始积极主动合作开发和科学研究Native AOT之后,他们有了捷伊形式。那是间接采用Native AOT表达式求出的形式,其它词汇(C++、Go、Java各式各样全力支持初始化求出表达式的词汇)就能间接初始化C求出的表达式来采用C库。

专业术语太少说,让他们已经开始试著。

他们先来三个单纯的试著,是采用C撰写三个用作对三个有理数请降的Add方式,接着采用C词汇初始化它。

1.具体来说他们须要建立三个捷伊C#工程项目。那个我们单厢了,能间接采用实用性文件增建,也能透过VS等IDE辅助工具增建。

2.为他们的工程项目重新加入Native AOT的全力支持,依照.NET的版相同有相同的形式。

假如你是.NET6则须要导入那个Nuget包,须要选定为,新版不然只容许.NET7以内采用。更多详情看hez2010的网志 http://www.cnblogs.com/hez2010/p/dotnet-with-native-aot.html

假如是.NET7因此只须要在工程项目特性中重新加入方可,本栏间接采用的.NET7,因此如下表所示实用性xml。

3.撰写三个静态方式,并且为它打上特性,告诉编译器他们须要将它作为表达式求出,选定名称为Add。

4.采用命令正式发布共享库。共享库的扩展名在相同的操作系统上不一样,如、、。当然他们也能正式发布静态库,只须要修改为方可。

5.采用辅助工具打开生成的文件,查看表达式求出是否成功,如下表所示图所示,他们成功的把ADD方式求出了,另外那个是默认求出用作Debugger的方式,他们能忽略。辅助工具下载链接放在文末。

6.撰写三个C词汇工程项目来测试呵呵他们的ADD方式是否可用。

7.跑起来看看

这样他们就完成了三个C表达式求出的工程项目,并且透过C词汇初始化了C求出的dll。同样他们能采用Go的、Java的、Python的来初始化他们生成的dll,在这里就不再演示了。

采用这种方式求出的表达式同样有一些限制,以下是在决定求出哪种托管方式时要考虑的一些限制:

求出的方式必须是静态方式。

求出的方式只能接受或返回基元或值类型(即结构体,假如有引用类型,那必须像P/Invoke一样封送所有引用类型参数)。

无法从常规托管C标识符初始化求出的方式,必须走Native AOT,否则将引发异常。

求出的方式不能采用常规的C异常处理,它们应改为返回错误标识符。

假如是引用类型不然注意须要传递指针或是序列化之后的结构体数据,比如他们撰写三个方式连接三个,因此C这边就应该这样写:

对应的C标识符也应该传递指针,如下表所示所示:

运行呵呵,结果如下表所示所示:

本文标识符链接:http://github.com/InCerryGit/BlogCodes/tree/main/CSharp-Dll-Export

DLL Export Viewer下载链接:http://www.nirsoft.net/utils/dllexp-x64.zip

NativeAOT文档:http://github.com/dotnet/runtime/tree/main/src/coreclr/nativeaot/docs

发布于 2022-09-23 00:09:25
收藏
分享
海报
0 条评论
39
目录

    推荐阅读

    0 条评论

    请文明发言哦~

    忘记密码?

    图形验证码