Извлечь объект из двоичного файла ole hdd

У меня особая проблема с объектами OLE, встроенными в документы Lotus Notes.

Пользователи прикрепили ф.э. Документы Word или Excel как объекты OLE (в Lotus Notes Document), и мне нужно получить эти исходные документы из OLE в виде файловых вложений, которые можно открыть в их основных приложениях.

Используя API Lotus Notes C, мне удалось отсоединить объекты OLE от жесткого диска. Проблема в том, что документ Word вложен в двоичный файл OLE в каталог Word.Document.8 или Word.Document.12. Просто переименование двоичного файла OLE в doc или docx не работает.

Вот почему я написал пакет Java OLE, который читает двоичные файлы и извлекает документы. Это работает, но ... есть обратная сторона.

Мне нужно проанализировать имя класса OLE, и если это Word.Document.8, мне нужно написать код, который вручную извлекает все потоки из каталога word.document.8 и сохраняет их как новый объект OLE .doc, чтобы Word мог его правильно открыть .

Это несложно только для документов Office, но в OLE можно встроить все, что угодно, и я не могу охватить все возможности.

Есть ли функция C api, которая может извлекать встроенные объекты из двоичного файла OLE (исходное имя файла не важно, но расширение)? Что делает Lotus или Word при двойном щелчке по объекту OLE? Он должен как-то реконструировать встроенный документ? Хотелось бы сделать так же :-)

Спасибо за помощь.


person Brlja    schedule 04.09.2012    source источник
comment
Это не о программировании встроенных систем. С пометкой   -  person uɐɪ    schedule 05.09.2012


Ответы (2)


попробуйте автоматизировать Notes, чтобы скопировать внедренный объект в буфер обмена, а затем получить формат CF_EMBEDDEDOBJECT из буфера обмена. Это похоже на то, как вы перетаскиваете элемент OLE в проводник Windows для создания файла записки.

Ссылки и полезные страницы:

[CiteHistory Record]

person Sheng Jiang 蒋晟    schedule 05.09.2012
comment
Это не сработает: Когда оболочка создает файл отходов, она представляет данные как внедренный объект. Когда лом переносится в другой контейнер, он передается как объект внедрения, даже если он возвращается в исходный документ. Ваше приложение отвечает за определение формата данных, содержащихся в записке, и за возвращение данных в исходный формат, если это необходимо. Похоже, я получу тот же двоичный файл OLE, который есть у меня сейчас. - person Brlja; 05.09.2012

Для извлечения файлов в C API я бы посмотрел на функцию NSFNoteCipherExtractFile (и NSFNoteCipherDecrypt). При использовании 8.x или новее.

person Tim    schedule 11.02.2013