관리되는 C# DLL에 관리되지 않는 DLL 포함
관리되지 않는 DLL을 관리되는 C# 코드와 통합할 때 개발자는 이러한 DLL을 관리되는 C# 코드에 포함해야 하는 경우가 종종 있습니다. 관리되는 어셈블리. 이 문서에서는 잠재적인 문제를 조사하고 관리되지 않는 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로 변환하여 "액세스가 거부되었습니다" 예외를 극복하고 이 통합 기술의 잠재력을 최대한 활용합니다.
위 내용은 관리되는 C# DLL에 관리되지 않는 DLL을 포함하고 '액세스가 거부되었습니다'를 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!