C#(.Net)將非托管dll嵌入exe中的實現(xiàn)
托管dll與非托管dll
托管dll實際上是指C#編寫的dll,可以直接右鍵“引用”導(dǎo)入
而大部分情況下,我們需要引用C++寫的dll,如果你的dll是使用 DllImport來導(dǎo)入的,那么它就屬于非托管dll,這種dll無法直接嵌入exe中,需要借助工具:Costura.Fody,該工具可以使用VS直接下載
下載與安裝
右鍵引用,選擇“管理NuGet程序包”,搜索 "fody"

?點擊Costure.Fody,選擇右邊詳情欄內(nèi)的“安裝”按鈕
檢查“引用”,發(fā)現(xiàn)Costura已經(jīng)加入到項目中

添加Dll
右鍵 解決方案-“添加”-“新建項”

?新建如圖所示的XML文件(如果自動生成了就不需要新建): FodyWeavers.xml

此時這個XML文件會被添加到項目根目錄,以我的dll為例
dll名稱為: PicSizer_CUDA.dll
dll位數(shù)為: 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”
在項目中創(chuàng)建文件夾: Costura64
如果是32位同理改為32

把dll復(fù)制到該文件夾中,在生成時,會自動尋找 Costura64和Costura32文件夾中的dll
將dll設(shè)置為“嵌入的資源”

調(diào)用
直接使用DllImport用平常的方式調(diào)用即可
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復(fù)制到其它路徑,可以正常運行
到此這篇關(guān)于C#(.Net)將非托管dll嵌入exe中的實現(xiàn)的文章就介紹到這了,更多相關(guān)C#將非托管dll嵌入exe 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解C#實現(xiàn)在Excel單元格中應(yīng)用多種字體格式
在Excel中,可對單元格中的字符串設(shè)置多種不同樣式。本文,將以C#及VB.NET代碼為例,介紹如何在Excel同一個單元格中應(yīng)用多種字體樣式,感興趣的可以了解一下2022-05-05
C#中使用強(qiáng)制類型實現(xiàn)字符串和ASCII碼之間的轉(zhuǎn)換
這篇文章主要介紹了C#中使用強(qiáng)制類型實現(xiàn)字符串和ASCII碼之間的轉(zhuǎn)換,本文還給出了另一種方法,需要的朋友可以參考下2014-08-08
SuperSocket入門--Telnet服務(wù)器和客戶端請求處理
本文的控制臺項目是根據(jù)SuperSocket官方Telnet示例代碼進(jìn)行調(diào)試的,官方示例代碼:Telnet示例。下面跟著小編一起來看下吧2017-01-01

