관리되지 않는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!