2009-12-15 41 views
6

Có hệ thống tài nguyên độc lập nền tảng cho C++ giống như hệ thống tài nguyên Qt (nhưng không phụ thuộc Qt) không?Hệ thống tài nguyên độc lập nền tảng (như hệ thống tài nguyên Qt)

Tôi muốn truy cập dữ liệu tùy ý từ bên trong mã nguồn C++ của mình. Tức là, không chỉ các biểu tượng mà còn cả bản dịch hoặc trình đổ bóng, v.v.

Hoặc một số loại thư viện hệ thống tệp ảo để truy cập ví dụ: một tập tin nén ZIP hoặc như vậy cũng sẽ phù hợp với nhu cầu của tôi.

+0

Tài nguyên có phải được nhúng trong tệp thi hành của bạn không? Nếu không thì một con đường khác có thể đang sử dụng SQLite để lưu trữ các tập tin - việc khởi động và chạy với cơ sở dữ liệu nhẹ này sẽ không phải là quá nhiều nỗ lực. – Rob

+0

Tương tự: http://stackoverflow.com/questions/549031/how-do-you-include-images-as-resources-in-a-c-executable – Rob

Trả lời

8

Tôi đã cuộn hệ thống của riêng mình cho dự án máy chủ web C++ về cơ bản đã lấy một loạt tệp (HTML, CSS, JS, PNG, v.v.) và tạo các tiêu đề C++ chứa dữ liệu được mã hóa là static const char*. Sau đó, tôi #include các tiêu đề mà tôi cần truy cập vào dữ liệu. Ứng dụng mã hóa các tệp 'tài nguyên' thực thi dưới dạng bước dựng sẵn. Bản thân ứng dụng mã hóa đã sử dụng boost::filesystem để tạo tiêu đề tài nguyên, do đó, hoạt động trên Windows/* nix.

Một tập tin tài nguyên đặc trưng có thể trông như thế này:

namespace resource 
{ 
    // Generated from mainPage.htm 
    static const char* mainPage_[] = 
    { 
    "<html>...</html>" 
    }; 
} 

Đối với nội dung nhị phân tôi mã hóa bằng cách sử dụng \x ký hiệu. Tôi cũng đảm bảo xếp hàng dữ liệu để có thể đọc được trong trình chỉnh sửa.

Tôi đã có một số vấn đề mặc dù - trình biên dịch MS không cho phép một static const char* lớn hơn 64Kb là một PITA. May mắn thay, chỉ có các tệp lớn hơn là các tệp JavaScript mà tôi có thể dễ dàng chia thành các đoạn nhỏ hơn - hình ảnh lớn sẽ là một vấn đề.

+0

và tại sao bạn sẽ làm điều đó? –

+4

Bởi vì tôi không thể tìm thấy một hệ thống tài nguyên giống như Qt đa nền tảng, đó là lý do tại sao. Tôi đưa ra câu hỏi một câu trả lời hợp lý và bạn đã bỏ phiếu cho tôi? Cảm ơn! – Rob

0

Chúng tôi đang sử dụng ICU ResourceBundle s cho điều đó và khá hài lòng với nó.

Sử dụng pkgdata tool, đóng gói ResourceBundles khá linh hoạt: như thư viện được chia sẻ, thư viện tĩnh hoặc dưới dạng tệp có thể được ICU ánh xạ bộ nhớ.

0

Tôi vừa vá chúng vào cuối thời gian thực thi tại thời gian liên kết dưới dạng blob nhị phân. Với 4byte cuối cùng là kích thước của khối trước đó và sau đó có chương trình đọc các mục dữ liệu từ đuôi.

Một cách tiếp cận khác nếu bạn cần cấu trúc kiểu tệp hệ thống hơn (mặc dù tôi chưa thử) sẽ đặt mọi thứ vào tệp zip và nối thêm vào cuối. Một lần nữa bạn sẽ cần một số kích thước tìm kiếm dễ dàng của dữ liệu được thêm vào.

Các vấn đề liên quan