Мне нужен пример для библиотеки GSF (
https://developer.gnome.org/gsf/1.14
) как записать с ее помощью под Linux (Raspbian) файл формата MS Structured Storage c целью его последующего чтения из под MS Windows стандартными для MS Windows средствами. Документации более менее понтяно описываюшей данный процесс не нашел, но нашел программу в которой эта библиотека исползуеться для этих-же целей:
https://github.com/GNOME/gnumeric . Посмотрел как они делают и сделал у себя вроде как также:
#include <iostream>
extern "C" {
#include <gsf/gsf.h>
#include<glib-object.h>
}
int main()
{
gsf_init();
const char * out_file_name = "storage.bin";
GError *err;
FILE *file = fopen(out_file_name, "wr");
if (!file) {
std::cout << "file open fail" << std::endl;
exit(0);
}
GsfOutput *output = gsf_output_stdio_new_FILE (out_file_name, file, false);
GsfOutfile *output_file_ole2 = gsf_outfile_msole_new(output);
GsfOutput *output2 = gsf_outfile_new_child(output_file_ole2, "5555tteesstt", false);
int ret;
GsfDocMetaData *docMetaData = gsf_doc_meta_data_new();
GValue x = G_VALUE_INIT;
g_value_init(&x, G_TYPE_STRING);
g_value_set_string(&x, "Ttteeesssttt");
gsf_doc_meta_data_insert(docMetaData, "zzzzz", &x);
gsf_doc_meta_dump(docMetaData);
ret = gsf_doc_meta_data_write_to_msole(docMetaData, output2, true);
std::cout << "gsf_doc_meta_data_write_to_msole ret=" << ret << std::endl;
ret = gsf_output_close(output2);
g_object_unref(output2);
std::cout << "ret=" << ret << std::endl;
ret = gsf_output_close(output);
g_object_unref(output);
std::cout << "ret=" << ret << std::endl;
return 0;
}
Но этот код не создает правильный файл: я не могу его потом открыть программой вроде SSViewer (
www.mitec.cz/ssv.html ). Более того, данные записываемые в output2 вообще не попадают в файл, буфер output2 отдельный от output и никуда не переноситься. Я могу записать буфер output2 в output с помошью функции gsf_output_write , физически данные в файле появляются, но он по-прежнему не открывается под MS Windows.
Буду признателен если кто то сможет подсказать где взять пример или более подробную документацию чем по ссылке что я приводил.