Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Membenamkan DLL Tidak Terurus dalam DLL C# Terurus?
Masalah:
Bagaimana anda boleh membenamkan DLL C yang tidak terurus dalam terurus C# DLL menggunakan DLLImport?
Jawapan:
Walaupun membenamkan DLL yang tidak terurus ke dalam DLL terurus biasanya dinasihatkan, ia boleh dicapai dengan mengekstrak DLL yang tidak terurus ke direktori sementara semasa permulaan dan memuatkannya secara eksplisit dengan LoadLibrary sebelum menggunakannya P/Invoke.
Pelaksanaan:
Contoh Kod:
// 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);
Perhatikan bahawa pendekatan ini mempunyai kelebihannya, seperti menyimpan segala-galanya dalam satu fail, tetapi memautkan DLL yang tidak terurus ke pemasangan sebagai fail berasingan biasanya disyorkan untuk keselamatan dan kesederhanaan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membenamkan DLL Tidak Terurus dalam DLL C# Terurus?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!