Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Icon: достать и записать


Автор: nerezus 17.8.2009, 04:30
1) Как достать из файла без использования апи?
2) Как записать ico в файл?

Restrictions
1) Файл считать массивом байт
2) Апи недоступны.

P.S. Я удивлен, что гугл мне не вывалил кучу всего....

Автор: GremlinProg 17.8.2009, 11:57
ну можно, конечно ресурсы раскопать,
только элементарно открыть файл образа ты как сможешь-то без API?

в линуксе, чтоли нужна иконка?

Автор: Bl4de 17.8.2009, 12:54
Цитата
Как достать из файла без использования апи?

1. Считать файл в память
2. Перейти к директории ресурсов 
3. найти в ней иконку

Автор: nerezus 17.8.2009, 13:40
> только элементарно открыть файл образа ты как сможешь-то без API?
Всмысле?

Я думал, что надо просто в EXE найти секцию с ресурсами и вытянуть из нее картинку.

Автор: GremlinProg 17.8.2009, 13:49
Цитата(nerezus @  17.8.2009,  15:40 Найти цитируемый пост)
Всмысле?

в прямом, CreateFile - это уже API

Автор: nerezus 17.8.2009, 13:55
GremlinProg, Значит не юзаем CreateFile.

Юзаем fopen. Который работать будет через libastral(вобщем через что fopen захочет работать - через то и будет)

Автор: 586 17.8.2009, 14:02
Цитата(nerezus @  17.8.2009,  14:40 Найти цитируемый пост)
только элементарно открыть файл образа ты как сможешь-то без API?

Код
#include <stdio.h>
#include <stdlib.h>

void* MapFile(const char *lpFileName, size_t *pSize)
{
    FILE *f;
    size_t n;
    void *p = 0;

    f = fopen(lpFileName, "rb");
    if(!f) return 0;

    fseek(f, 0, SEEK_END);
    n = ftell(f);
    if(n)
    {
        p = malloc(n);
        if(p)
        {
            fseek(f, 0, SEEK_SET);
            fread(p, 1, n, f);
            if(pSize) *pSize = n;
        }
    }
    fclose(f);
    return p;
}

int main(int argc, char* argv[])
{
    void* p = MapFile(argv[0], NULL);
    printf("%s\n", p);   // print "MZ", if success
    free(p);
    getchar();
    return 0;
}

А дальше поможет документация по PE формату.

Автор: GremlinProg 17.8.2009, 14:08
586, загляни в open.c и найди строку CreateFile,
думаю это тебя натолкнет на размышления
Цитата(nerezus @  17.8.2009,  15:55 Найти цитируемый пост)
Юзаем fopen. Который работать будет через libastral

поэтому изначально и спрашивал:
Цитата(GremlinProg @  17.8.2009,  13:57 Найти цитируемый пост)
в линуксе, чтоли нужна иконка?

точнее нужно формулировать вопросы

Добавлено через 7 минут и 29 секунд
PE-документация тут: http://forum.vingrad.ru/index.php?showtopic=86452&view=findpost&p=1742306

Автор: 586 17.8.2009, 14:20
Цитата(GremlinProg @  17.8.2009,  15:08 Найти цитируемый пост)
загляни в open.c и найди строку CreateFile,

я это знаю
Цитата(GremlinProg @  17.8.2009,  15:08 Найти цитируемый пост)
Цитата(nerezus @  17.8.2009,  14:55 Найти цитируемый пост)
Юзаем fopen. Который работать будет через libastral

Там fopen особенный? Я вроде все стандартные функции использовал.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)