문제:
관리되는 DLL 내에 관리되지 않는 C DLL을 어떻게 포함할 수 있습니까? C# DLL을 사용하여 DLLImport?
답변:
관리되지 않는 DLL을 관리되는 DLL에 포함하는 것은 일반적으로 권장되지 않지만 초기화 중에 관리되지 않는 DLL을 임시 디렉토리에 추출하고 사용하기 전에 LoadLibrary를 사용하여 명시적으로 로드 P/Invoke.
구현:
예제 코드:
// Get temporary directory with assembly version in path string dirName = Path.Combine(Path.GetTempPath(), "MyAssembly." + Assembly.GetExecutingAssembly().GetName().Version); Directory.CreateDirectory(dirName); string dllPath = Path.Combine(dirName, "MyAssembly.Unmanaged.dll"); // Get embedded resource stream and copy DLL to temporary file 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 DLL explicitly IntPtr h = LoadLibrary(dllPath); Debug.Assert(h != IntPtr.Zero, "Unable to load library " + dllPath);
이 접근 방식에는 모든 것을 단일 파일에 보관하는 등의 장점이 있지만 관리되지 않는 DLL을 별도의 파일로 어셈블리에 연결하는 것이 일반적으로 권장됩니다. 보안과 단순성을 모두 보장합니다.
위 내용은 관리되는 C# DLL 내에 관리되지 않는 DLL을 어떻게 포함할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!