FILE - это структура: Код (Text): struct _iobuf { char *_ptr; int _cnt; char *_base; int _flag; int _file; int _charbuf; int _bufsiz; char *_tmpfname; }; typedef struct _iobuf FILE; Где-то читал, что FILE можно так проинициализировать, чтобы читать/писать из памяти. У кого какие знания ?
строго говоря это не обязано быть так, стандарт (C99) лишь поверхностно описывает FILE как некий объект, способный хранить такую-то информацию.
max7C4, meduza, Есть dll-лина, скомпилированная в VC++ 6.0 , которая пишет в FILE*. Мне очень нужно, чтобы она писала в память. Вот ищу инфу, как это возможно реализовать.
#define old_write new_write int new_write(FILE* f, char* buf, int buf_len){ ... } или опишите вопрос гораздо подробнее. местная ванга в отпуске.
_basmp_, Есть не моя dll-лина, скомпилированная в VC++ 6.0 , которая содержит функцию для записи в FILE*. Мне очень нужно, чтобы функция писала в память, а не файл. Вот ищу инфу, как это возможно реализовать. void SomeDLL_Info_WriteToFile(int Info_ID, FILE* dest);
не получится, даже если ты будешь писать под конретную реализацию, даже если вручную заполнишь _iobuf. Откуда ты знаешь, как будет реализована fwrite() или другая функция. FILE предназначен для файлов, а не для памяти.
DevilDevil Можно попробовать так: открываешь файл, получаешь из FILE его хэндл, сохраняешь в глобальной переменной, хукаешь в таблице импорта твоей длл WriteFile, в своей функции проверяешь, твой ли хэндл, если да -- просто пишешь в свой буфер данные, обнуляешь глобальную переменную перед закрытием файла, по идее не должно возникнуть проблем.
meduza, не, как то можно было. только пример не могу найти. может всё-таки, знает кто ? Velheart, выход, но... пока поищу более прямой способ. Там флаги как-то нужно было выставлять.