Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Загрузка данных из ресурсов


Автор: Nastya 13.10.2003, 14:17
Итак:

Существует данные (произвольного формата и небольшого объема), которые раньше хранились в файле на диске.

Задача: занести эти файлы в ресурсы, при этом должна быть возможность работать с ними, как с открытым дисковым файлом.

Цель:
1. Безопасность работы (файл на диске может быть удален и если наличие данных критично для работы программы, то это может вызвать определенные проблемы)
2. Если обращенние к данным частое, то это может сократить время их обрабюотки
3. они остаются относительно невидимыми для пользователя. Естественно если очень захотеть их можно и посмотреть и поменять, но сделать это уже сложнее.


Автор: Step 13.10.2003, 14:34
Nastya, технология проекции файла в память, особенность в том что если файл в ресурсах то он уже в памяти, что бы получить указатель на данные ты должна получить HGLOBAL через LoadResource
Код
lpv=(LPVOID)::LoadResource(NULL,::FindResource(....),тип данных)
lpv можно преобразовать в указатель и работать как с проекцией

Автор: mr.DUDA 13.10.2003, 23:02
Вот, у меня была такого рода задачка. Надо было запихнуть EXE-шник размером 100 килобайт в ресурсы другого EXE-шника. Я решал её так:
1) создавал ресурс AddResource->Import...
2) выбирал тип файлов "All files", выбирал нужный файл
3) вводил какое-нибудь имя для типа ресурсов, например, EXEBINARY
4) в том месте программы, где нужно получить доступ (читай: "указатель на блок памяти с загруженным ресурсом") к ресурсу, вставлял код:
Код
    HRSRC hRes = FindResource(0, MAKEINTRESOURCE(IDR_EXEBINARY), "EXEBINARY");
    HGLOBAL hLoaded = LoadResource(0, hRes);
    LPVOID lpResource = LockResource(hLoaded);   // указатель на блок памяти
    DWORD dwSize = SizeofResource(0, hRes);      // размер блока памяти

    // ... какие-то действия с загруженным ресурсом

    UnlockResource(hLoaded);

Довольно просто, не так ли ?

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