我們總會遇到需要載入非win32的非託管dll,這裡推薦一種方式就是將那些非win32的非託管dll嵌入資源的方式,在入口解壓並且載入的方式,我先來看看如何實現吧,首先我們準備好demo,新增控制台專案如下:
**如下:
static void main(string args)
///
/// 解壓資源並且載入非託管dll
///
static void unzip程式設計客棧dload()
.dll");//解壓輸出的路徑
if (!file.exists(dllpath))
file.writeallbytes(dllpath, resource.pdfium);
loaddll(dllpath);//應該每次都載入非託管
}///
/// 載入非託管dll
///
///
public static void loaddll(string dllname)
", e);
}console.writeline("load library successful");
}[dllimport("kernel32", setlasterror = true, charset = charset.unicode)]
static extern intptr loadlibrary(string lpfilename);
輸出:load library successful
其實上述**還有優化的空間,微軟整合了很多win32函式的包,例如我們要匯入win32的下常見的kernel32dll和user32dll,我們可以通過nuget安裝,我們可以在csproj加入以下**(或者直接nuget搜尋pinvoke.kernel32):
那麼之前的**刪除的loadlibrary方法刪除,loaddll方法則直接改為以下:
///
/// 載入非託管dll
///
///
public static void loaddll(string dllname)
", e);
}console.writeline("load library successful");}參考
利用反射動態呼叫C 嵌入到資源的託管DLL
以前寫了一篇部落格 c 嵌入dll到資源釋放的問題 講到了dll檔案嵌入到資源後,程式執行時自動釋放並實現 呼叫的問題。很多讀者都問到了同乙個問題 文章針對的是非託管的win 32 dll,那麼託管的dll怎麼嵌入並釋放呢?這篇文章就來聊一下這個話題。由於託管應用程式在啟動時就需要載入全部使用到的託...
C 動態載入嵌入資源 DLL
在resources.resx資源檔案中新增資源後,編譯後資源可以嵌入在exe檔案中,常見的資源有 音訊,文字等等。在程式中通過如下 即可呼叫 properties.resources.星號部分就是新增的資源名稱,點出來就有。同樣在resources.resx中,嵌入乙個編譯好的dll檔案,如db....
C 託管資源和非託管資源
託管資源指的是.net可以自動進行 的資源,主要是指託管堆上分配的記憶體資源。託管資源的 工作是不需要人工干預的,有.net執行庫在合適呼叫垃圾 器進行 非託管資源指的是.net不知道如何 的資源,最常見的一類非託管資源是包裝作業系統資源的物件,例如檔案,視窗,網路連線,資料庫連線,畫刷,圖示等。這...