Как заставить fwrite() писать в память

Тема в разделе "LANGS.C", создана пользователем DevilDevil, 10 ноя 2008.

  1. DevilDevil

    DevilDevil Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2007
    Сообщения:
    101
    FILE - это структура:

    Код (Text):
    1. struct _iobuf {
    2.         char *_ptr;
    3.         int   _cnt;
    4.         char *_base;
    5.         int   _flag;
    6.         int   _file;
    7.         int   _charbuf;
    8.         int   _bufsiz;
    9.         char *_tmpfname;
    10.         };
    11. typedef struct _iobuf FILE;
    Где-то читал, что FILE можно так проинициализировать, чтобы читать/писать из памяти.
    У кого какие знания ?
     
  2. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    а чем не нравится memcpy?
     
  3. meduza

    meduza New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2008
    Сообщения:
    212
    строго говоря это не обязано быть так, стандарт (C99) лишь поверхностно описывает FILE как некий объект, способный хранить такую-то информацию.
     
  4. DevilDevil

    DevilDevil Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2007
    Сообщения:
    101
    max7C4,
    meduza,

    Есть dll-лина, скомпилированная в VC++ 6.0 , которая пишет в FILE*. Мне очень нужно, чтобы она писала в память. Вот ищу инфу, как это возможно реализовать.
     
  5. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    #define old_write new_write

    int new_write(FILE* f, char* buf, int buf_len){
    ...
    }

    или опишите вопрос гораздо подробнее. местная ванга в отпуске.
     
  6. DevilDevil

    DevilDevil Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2007
    Сообщения:
    101
    _basmp_,

    Есть не моя dll-лина, скомпилированная в VC++ 6.0 , которая содержит функцию для записи в FILE*.
    Мне очень нужно, чтобы функция писала в память, а не файл. Вот ищу инфу, как это возможно реализовать.

    void SomeDLL_Info_WriteToFile(int Info_ID, FILE* dest);
     
  7. meduza

    meduza New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2008
    Сообщения:
    212
    не получится, даже если ты будешь писать под конретную реализацию, даже если вручную заполнишь _iobuf. Откуда ты знаешь, как будет реализована fwrite() или другая функция. FILE предназначен для файлов, а не для памяти.
     
  8. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    meduza
    DevilDevil
    Исходники CRT доступны.
     
  9. Velheart

    Velheart New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    526
    DevilDevil
    Можно попробовать так: открываешь файл, получаешь из FILE его хэндл, сохраняешь в глобальной переменной, хукаешь в таблице импорта твоей длл WriteFile, в своей функции проверяешь, твой ли хэндл, если да -- просто пишешь в свой буфер данные, обнуляешь глобальную переменную перед закрытием файла, по идее не должно возникнуть проблем.
     
  10. DevilDevil

    DevilDevil Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2007
    Сообщения:
    101
    meduza, не, как то можно было.
    только пример не могу найти.

    может всё-таки, знает кто ?

    Velheart, выход, но... пока поищу более прямой способ. Там флаги как-то нужно было выставлять.
     
  11. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
  12. DevilDevil

    DevilDevil Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2007
    Сообщения:
    101
    q_q,

    тема! спасибо большое!
     
  13. DevilDevil

    DevilDevil Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2007
    Сообщения:
    101
    всем остальным учатникам тоже спасибо, что постарались помочь.