Tôi có thể tải thư viện từ luồng bộ nhớ không? Ví dụ: thư viện của tôi được mã hóa một tệp. Tôi kiểm tra một số điều kiện và giải mã tệp vào luồng bộ nhớ. Bây giờ tôi cần tải thư viện đã giải mã từ luồng đó vào ứng dụng của tôi và sử dụng các chức năng của nó vv.Tôi có thể tải thư viện từ luồng bộ nhớ không?
Trả lời
Trong cửa sổ, DLL chỉ có thể được tải từ một tệp - như các liên kết được đề xuất, bạn có thể tạo đĩa RAM và cài đặt như một ổ đĩa, nhưng không có cách nào xung quanh DLL cần phải được tải thông qua một tập tin tồn tại trong một hệ thống tập tin. Một phần của lý do cho điều này là DLL là "nhu cầu nạp", đó là hệ thống không tải toàn bộ tập tin vào bộ nhớ cùng một lúc, nó tải các bộ phận đang thực sự được sử dụng, 4KB (thường) tại một thời điểm. Nó cũng không được trao đổi với vùng trao đổi, nó chỉ bị loại bỏ và nạp lại từ DLL nếu hệ thống đang thiếu bộ nhớ.
Linux hoạt động theo cách tương tự (tôi biết nó sử dụng cùng một loại yêu cầu tải theo mặc định, nhưng không chắc chắn nếu có cách nào đó), vì vậy tôi không tin có cách nào khác một trong hai, nhưng tôi đã không nhìn sâu vào nó. Tất nhiên, nếu tất cả những gì bạn muốn là một đoạn mã mà bạn có thể sử dụng trong ứng dụng của mình, và bạn muốn lưu trữ nó dưới dạng mã hóa/nén/bất cứ thứ gì trong tập tin có giá trị, bạn có thể phân bổ một số bộ nhớ thực thi (trong Windows, bạn có thể sử dụng VirtualAlloc
để cấp phát bộ nhớ thực thi). Tuy nhiên, bạn cần đảm bảo rằng bạn di chuyển bất kỳ địa chỉ bộ nhớ tuyệt đối nào trong mã của bạn nếu bạn làm như vậy, vì vậy bạn sẽ cần phải lưu trữ thông tin di chuyển trong tệp thực thi của bạn.
Rõ ràng, giải pháp dễ dàng là giải nén nội dung của bạn thành một tệp trong hệ thống tệp và tải từ đó.
Xem https://github.com/fancycode/MemoryModule để có giải pháp tốt hơn đáng kể so với ramdisk (nếu có giải pháp "tốt" hoặc "tốt hơn", tôi không nghĩ rằng nên thử ngay từ đầu). – Damon
@ Damon: Đó là làm những gì tôi mô tả trong đoạn thứ ba, từ những gì tôi có thể nói (tôi đã không có thông qua TẤT CẢ các mã chi tiết). –
@MatsPeterson: Vâng, đó chính xác là những gì nó làm. Đó là một thực hiện làm việc (tôi đã thử nó một vài năm trước đây) và tốt hơn một chút so với phương pháp "ramdisk" cho những gì OP muốn (vì bạn chỉ có thể đọc các tập tin không được mã hóa từ đĩa RAM anyway). Mặc dù tất nhiên, tôi vẫn không nghĩ rằng nó là một ý tưởng tốt để giả mạo với những thứ đó để bắt đầu, vì nó nghiêm trọng can thiệp vào quản lý VM và nó phần nào mâu thuẫn với khái niệm của một thư viện được chia sẻ, quá. Điểm có DLL là tập tin dựa trên là bạn có thể bản đồ các trang tương tự cho một số quy trình, ném chúng đi, và tải lại theo yêu cầu. – Damon
- 1. Tải thư viện động từ bộ nhớ
- 2. Có thể tải App.Config từ chuỗi hoặc luồng bộ nhớ không?
- 3. do: java.lang.UnsatisfiedLinkError: Không thể tải thư viện
- 4. chuyển đổi chuỗi thành luồng bộ nhớ - Luồng bộ nhớ không thể mở rộng?
- 5. Tôi có thể phân tách luồng không?
- 6. Không thể tải thư viện năng động
- 7. Tải thư viện từ jar
- 8. Tải xuống bộ nhớ trong có thể?
- 9. Đọc từ luồng bộ nhớ thành chuỗi
- 10. Trả lại luồng bộ nhớ từ hàm
- 11. Không gian bộ nhớ thư viện được chia sẻ
- 12. Tôi có thể sử dụng các thư viện từ FFmpeg trong một ứng dụng Android không?
- 13. Tạo tệp Zip từ luồng bộ nhớ C#
- 14. Tôi có thể hứa hẹn đồng bộ trong thư viện JavaScript Q không?
- 15. Tôi có thể cài đặt thư viện "scraperwiki" cục bộ không?
- 16. Thư viện bộ nhớ chia sẻ phân tán cho C++?
- 17. Tôi có thể giải phóng bộ nhớ cho SysAllocString không?
- 18. Đang tải DLL từ một vị trí trong bộ nhớ
- 19. Rails nghi ngờ thiết kế: Nên/tôi có thể tải toàn bộ từ điển/bảng vào bộ nhớ?
- 20. PLS-907 không thể tải đơn vị thư viện
- 21. Tải hình ảnh Picturebox từ bộ nhớ?
- 22. tải .so tập tin từ bộ nhớ
- 23. Tải hình ảnh từ luồng mà không giữ luồng mở
- 24. Pandas HDFStore tải dataframe từ bộ nhớ
- 25. nginx ngăn tải từ bộ nhớ cache
- 26. Tải nhanh bitmap từ bộ nhớ
- 27. C++ thư viện nén trong bộ nhớ nào?
- 28. Không thể truy cập Luồng bộ nhớ đã đóng của luồng, cách mở lại?
- 29. Ứng dụng Mac OS X có thể ngăn dlopen tải thư viện không?
- 30. Có thư viện bộ nhớ tạm thời phân cấp nguồn mở nào không?
Tìm thấy điều này cho OSX: http://stackoverflow.com/questions/11821955/load-dynamic-library-from-memory và điều này cho các cửa sổ: http://stackoverflow.com/questions/638277/loading-dll- from-a-location-in-memory – koopajah
Tôi cần giải pháp cho Windows và Linux. –