マネージド C# DLL へのアンマネージド DLL の埋め込み
アンマネージド DLL をマネージド C# コードと統合する場合、開発者は多くの場合、これらの DLL をマネージド C# DLL に埋め込む必要に遭遇します。管理されたアセンブリ。この記事では、潜在的な問題を調査し、アンマネージ DLL をマネージ DLL に埋め込むための解決策を提供します。
問題の説明
開発者がマネージド C# 内にアンマネージ DLL を埋め込もうとしています。 Microsoft の推奨に従って、DllImport 属性を使用する DLL。ただし、コードを実行すると、「アクセスが拒否されました」例外がスローされます。
解決策
MSDN ドキュメントでは、アンマネージ DLL の埋め込みの可能性が示唆されていますが、失敗します。 DLL のアクセス許可に関連する根本的な問題に対処します。次の解決策は、この問題に効果的に対処します:
これは、次の実装例です。このアプローチ:
// Extract the unmanaged DLL 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"); using (Stream stm = Assembly.GetExecutingAssembly().GetManifestResourceStream("MyAssembly.Properties.MyAssembly.Unmanaged.dll")) { using (Stream outFile = File.Create(dllPath)) { const int sz = 4096; byte[] buf = new byte[sz]; while (true) { int nRead = stm.Read(buf, 0, sz); if (nRead < 1) break; outFile.Write(buf, 0, nRead); } } } // Load the DLL explicitly IntPtr h = LoadLibrary(dllPath); Debug.Assert(h != IntPtr.Zero, "Unable to load library " + dllPath);
これらの手順に従うことで、開発者は成功することができます。アンマネージド DLL をマネージド C# DLL に埋め込み、「アクセスが拒否されました」例外を克服し、この統合手法の可能性を最大限に引き出します。
以上がアンマネージド DLL をマネージド C# DLL に埋め込み、「アクセスが拒否されました」を回避する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。