Bạn sẽ nhúng DLL gốc của mình làm tài nguyên.
Sau đó, khi chạy, bạn sẽ phải giải nén các tệp DLL gốc đó vào một thư mục tạm thời; bạn không nhất thiết phải ghi quyền truy cập vào thư mục ứng dụng khi ứng dụng của bạn khởi chạy: hãy nghĩ về windows vista hoặc windows 7 và UAC. Kết quả là bạn sẽ sử dụng loại mã này để tải chúng từ một đường dẫn cụ thể:
public static class NativeMethods {
[DllImport("kernel32")]
private unsafe static extern void* LoadLibrary(string dllname);
[DllImport("kernel32")]
private unsafe static extern void FreeLibrary(void* handle);
private sealed unsafe class LibraryUnloader
{
internal LibraryUnloader(void* handle)
{
this.handle = handle;
}
~LibraryUnloader()
{
if (handle != null)
FreeLibrary(handle);
}
private void* handle;
} // LibraryUnloader
private static readonly LibraryUnloader unloader;
static NativeMethods()
{
string path;
// set the path according to some logic
path = "somewhere/in/a/temporary/directory/Foo.dll";
unsafe
{
void* handle = LoadLibrary(path);
if (handle == null)
throw new DllNotFoundException("unable to find the native Foo library: " + path);
unloader = new LibraryUnloader(handle);
}
}
}
Nguồn
2010-07-31 09:21:02
có thể trùng lặp của [Nhúng dll không được quản lý vào một C# dll được quản lý] (http://stackoverflow.com/questions/666799/embedding-unmanaged-dll-into-a-managed-c-dll) –
tôi không đồng ý với việc đóng trùng lặp - câu trả lời cho câu hỏi khác mô tả phần "nhúng dưới dạng tài nguyên" chứ không phải cách tải đúng thư viện khi chúng đã được trích xuất vào ổ đĩa –