日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

C#(.Net)將非托管dll嵌入exe中的實現_C#教程

作者:Dear_Xuan ? 更新時間: 2022-03-19 編程語言

托管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復制到其它路徑,可以正常運行

原文鏈接:https://blog.csdn.net/qq_39200794/article/details/122146823

欄目分類
最近更新