原生导出.NET汇编项目DNNE使用教程
DNNE Prototype native exports for a .NET Assembly. 项目地址: https://gitcode.com/gh_mirrors/dn/DNNE
1. 项目介绍
DNNE(Native Exports for .NET)是一个开源项目,旨在为.NET托管程序集提供原生导出功能。它允许开发者在.NET程序集中定义可以被原生代码调用的函数。这个项目受到了Xamarin、CoreRT和DllExport项目的启发,并为.NET 6.0或更高版本提供支持。
2. 项目快速启动
环境要求
- .NET 6.0 或更高版本的SDK
- C99兼容的编译器
- Windows平台:
- Visual Studio 2015 或更高版本
- Windows 10 SDK(随Visual Studio安装)
- .NET Framework 4.x SDK(如果目标框架为.NET Framework TFM)
安装DNNE
- 从NuGet.org获取DNNE NuPkg,或构建本地的DNNE NuPkg。
- 将DNNE NuPkg添加到托管项目中。
- 在项目的
.csproj
文件中添加以下代码:
<ItemGroup>
<PackageReference Include="DNNE" Version="2.*" />
</ItemGroup>
- 设置项目属性
<EnableDynamicLoading>
为true
。
定义和导出函数
- 在.NET托管项目中定义一个静态公共类,并在其中定义要导出的函数。
[UnmanagedCallersOnly]
public static int MyExport(int a)
{
return a;
}
- 如果需要,可以通过设置
EntryPoint
属性来自定义导出函数的名称。
[UnmanagedCallersOnly(EntryPoint = "CustomName")]
public static int MyExport(int a)
{
return a;
}
- 生成托管项目,以生成带有
.NE
后缀的原生二进制文件。
3. 应用案例和最佳实践
导出结构体
如果需要导出一个结构体,可以通过使用C99DeclCodeAttribute
和C99TypeAttribute
属性来定义原生类型映射。
public struct Data
{
public int a;
public int b;
public int c;
}
[UnmanagedCallersOnly]
[C99DeclCode("struct T { int a; int b; int c; };")]
public static int ReturnDataCMember([C99Type("struct T")] Data d)
{
return d.c;
}
调用约定
在x86平台上,可能需要考虑调用约定的影响。如果需要特定的装饰符号和调用约定,可以通过提供.def
文件或手动编译源代码来满足需求。
4. 典型生态项目
DNNE项目可以与多种生态项目结合使用,例如:
- Xamarin: 在移动应用开发中提供原生性能。
- CoreRT: 在.NET Core运行时中使用,为跨平台应用提供支持。
- DllExport: 用于创建可以从其他语言调用的.NET库。
通过集成这些项目,开发者可以扩展.NET应用的性能和兼容性。
DNNE Prototype native exports for a .NET Assembly. 项目地址: https://gitcode.com/gh_mirrors/dn/DNNE
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考