將非託管DLL 嵌入到託管C# DLL 中
將非託管DLL 嵌入到託管DLL 中是一種鞏固和保護依賴項的有用技術。但是,實現起來可能具有挑戰性。
問題:
嘗試使用 DllImport 將非託管 DLL 嵌入到託管 DLL 中時,會遇到存取被拒絕的情況錯誤。
說明:
要將非託管DLL 嵌入為資源,除了簡單地將其添加為專案中的嵌入資源之外,您還需要執行其他步驟。
解決方案:
成功嵌入並在託管DLL 中使用非託管DLL:
提取並提取並載入嵌入式DLL:
使用唯一的臨時目錄:
處理檔案複製異常:
範例程式碼:
以下程式碼片段示範了嵌入過程:
// Get a unique temporary directory for this assembly version string dirName = Path.Combine(Path.GetTempPath(), "MyAssembly." + Assembly.GetExecutingAssembly().GetName().Version.ToString()); if (!Directory.Exists(dirName)) Directory.CreateDirectory(dirName); string dllPath = Path.Combine(dirName, "MyAssembly.Unmanaged.dll"); // Extract the embedded DLL to the temporary location using (Stream stm = Assembly.GetExecutingAssembly().GetManifestResourceStream( "MyAssembly.Properties.MyAssembly.Unmanaged.dll")) { using (Stream outFile = File.Create(dllPath)) { CopyBytes(stm, outFile); } } // Load the extracted DLL explicitly IntPtr h = LoadLibrary(dllPath); Debug.Assert(h != IntPtr.Zero, "Unable to load library " + dllPath);
以上是如何在託管 C# DLL 中成功嵌入和使用非託管 DLL?的詳細內容。更多資訊請關注PHP中文網其他相關文章!