本文主要介绍了C#(.Net)将非托管dll嵌入exe中的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
托管dll与非托管dll
托管dll实际上是指C#编写的dll,可以直接右键“引用”导入
而大部分情况下,我们需要引用C++写的dll,如果你的dll是使用 DllImport来导入的,那么它就属于非托管dll,这种dll无法直接嵌入exe中,需要借助工具:Costura.Fody,该工具可以使用VS直接下载
下载与安装
右键引用,选择“管理NuGet程序包”,搜索 "fody"
点击Costure.Fody,选择右边详情栏内的“安装”按钮
检查“引用”,发现Costura已经加入到项目中
添加Dll
右键 解决方案-“添加”-“新建项”
新建如图所示的XML文件(如果自动生成了就不需要新建): FodyWeavers.xml
此时这个XML文件会被添加到项目根目录,以我的dll为例
dll名称为: PicSizer_CUDA.dll
dll位数为: 64位
修改XML文件
<?xml version="1.0" encoding="utf-8"?>
<Weavers
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
<Costura>
<Unmanaged64Assemblies>
PicSizer_CUDA
</Unmanaged64Assemblies>
</Costura>
</Weavers>
注意:不要有后缀名,如果是32位只需要把“64”改成“32”
在项目中创建文件夹: Costura64
如果是32位同理改为32
把dll复制到该文件夹中,在生成时,会自动寻找 Costura64和Costura32文件夹中的dll
将dll设置为“嵌入的资源”
调用
直接使用DllImport用平常的方式调用即可
const string dll_path = "PicSizer_CUDA.dll";
[DllImport(dll_path, EntryPoint = "SetBrightness", CallingConvention = CallingConvention.Cdecl)]
public static extern bool SetBrightness(IntPtr ori, int length, byte dark);
[DllImport(dll_path, EntryPoint = "IsGPUSupport", CallingConvention = CallingConvention.Cdecl)]
public static extern bool IsGPUSupport();
编译
重新编译出exe,将exe复制到其它路径,可以正常运行
到此这篇关于C#(.Net)将非托管dll嵌入exe中的实现的文章就介绍到这了,更多相关C#将非托管dll嵌入exe 内容请搜索得得之家以前的文章希望大家以后多多支持得得之家!
本文标题为:C#(.Net)将非托管dll嵌入exe中的实现
- C# 使用Aspose.Cells 导出Excel的步骤及问题记录 2023-05-16
- Unity Shader实现模糊效果 2023-04-27
- 在C# 8中如何使用默认接口方法详解 2023-03-29
- .NET CORE DI 依赖注入 2023-09-27
- WPF使用DrawingContext实现绘制刻度条 2023-07-04
- Unity3D实现渐变颜色效果 2023-01-16
- user32.dll 函数说明小结 2022-12-26
- 如何使用C# 捕获进程输出 2023-03-10
- Oracle中for循环的使用方法 2023-07-04
- c# 模拟线性回归的示例 2023-03-14