Независимая от платформы система ресурса (как спокойная система Ресурса)

Существует ли независимая от платформы система ресурса для C++ как тот, который идет с QT (но без спокойной зависимости)?

Я хотел бы получить доступ к произвольным данным из своего исходного кода C++. Таким образом, не только значки, но также и переводы или программы построения теней, и т.д.

Кроме того, своего рода библиотека виртуальной файловой системы к доступу, например, сжатому файлу ZIP или такому также соответствовала бы моим потребностям.

6
задан Peter Mortensen 2 August 2010 в 16:40
поделиться

4 ответа

I rolled my own system for a C++ web server project that basically took a bunch of files (HTML, CSS, JS, PNGs, etc.) and created C++ headers containing the data encoded as static const char*. I then #include those headers where I need access to the data. The app that encodes the 'resource' files executes as a pre-build step. The encoding app itself used boost::filesystem to create the resource headers, so works on Windows/*nix.

A typical resource file might look like this:

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

For binary content I encode using the \x notation. I also make sure to line-wrap the data so it is readable in an editor.

I did have some issues though - the MS compiler doesn't allow a static const char* to be bigger than 64Kb which was a PITA. Luckily the only files larger than this were JavaScript files that I could easily split into smaller chunks - large images would be a problem though.

9
ответ дан 10 December 2019 в 00:39
поделиться

Мы используем ICU ResourceBundle S для этого и довольно довольны этим.

Использование инструмента PKGDATA , пакеты RescountBundles довольно гибкий: в качестве общей библиотеки, статической библиотеки или в качестве файлов, которые могут быть сопоставлены в память ICU.

0
ответ дан 10 December 2019 в 00:39
поделиться

Я только что залатал их в конец исполняемого файла во время соединения, как двоичный блок. При этом последние 4 байта будут размером с предыдущий блок, а затем пусть программа считывает элементы данных из хвоста.

Другим подходом, если вам нужна структура типа файловой системы (хотя я не пробовал), будет поместить все в zip-файл и добавить его в конец. Опять же, вам понадобится некоторый легкодоступный размер добавленных данных.

0
ответ дан 10 December 2019 в 00:39
поделиться

Ответ xxd на этот вопрос - это то, что вы ищете.

1
ответ дан 10 December 2019 в 00:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: