Поиск:

Ответ в темуСоздание новой темы Создание опроса
> LoadResourсe, Помогите 
:(
    Опции темы
Crut
Дата 10.1.2008, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 27.11.2007
Где: Воронеж

Репутация: нет
Всего: нет



На форме 3 обьекта:
Код

        TMemo *File;
        TButton *Button1;
        TButton *Button2;


Кнопка 1 загружает в ресурсы "a.exe" текст из File:
Код

 void __fastcall TForm1::Button1Click(TObject *Sender)
{
void * hUpdate = BeginUpdateResource("a.exe",false);
char * text = new char[File->Text.Length()];
text = File->Text.c_str();
UpdateResource(hUpdate,"RT_RCDATA","LIBRARY",0, (LPVOID)text, File->Text.Length());
delete [] text;
EndUpdateResource(hUpdate, false);
}
//---------------------------------------------------------------------------

 

А кнопка2 должна загрузить из ресурсов "a.exe" файл в File. Но как это реализовать??
Заранее благодарен...  smile 
PM MAIL   Вверх
SenkraD
Дата 10.1.2008, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 3.2.2006
Где: Украина::Киев

Репутация: 9
Всего: 23



Crut, в Builder есть удобная оболочка TResourceStream,
поищи - примеров куча как на форуме так и в нете вцелом




--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
artsb
Дата 10.1.2008, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Вместо этого:
Код

text = File->Text.c_str();

лучше так:
Код

strcpy(text, File->Text.c_str());

А по поводу загрузки и выгрузки ничего сказать не могу. Сам создавал такой топик, но никто не ответил. :(


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Crut
Дата 11.1.2008, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 27.11.2007
Где: Воронеж

Репутация: нет
Всего: нет



Цитата(SenkraD @  10.1.2008,  13:14 Найти цитируемый пост)
Crut, в Builder есть удобная оболочка TResourceStream,
поищи - примеров куча как на форуме так и в нете вцелом

Искать - это время надо, а мне позарез. Можно пожалуйста хорошую ссылку...

PM MAIL   Вверх
Crut
Дата 11.1.2008, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 27.11.2007
Где: Воронеж

Репутация: нет
Всего: нет



Код

void * hUpdate = BeginUpdateResource("a.exe",false);
char * text = new char[File->Text.Length()];
text = File->Text.c_str();
  TResourceStream *aa = new
 TResourceStream((int)hUpdate,AnsiString("LIBRARY"),RT_RCDATA);
 aa->Write(text, 0);
delete [] text;
EndUpdateResource(hUpdate, false);


Компилица запускаится, а когда я нажимаю на кнопку, выдаёт, что ресурс "LIBRARY" ненайден. Что делать??
PM MAIL   Вверх
artsb
Дата 11.1.2008, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Из справки:
Цитата

In the first constructor syntax, the ResName is the string associated with the resource in the .RC file that was compiled with the application. If the resource is associated with an integer ID rather than a string, use the string representation of the integer after a pound sign (#), or use the second constructor syntax. Thus, for example, a resource with an integer identifier of 128 be identified by a ResName of #128. when invoking the first constructor syntax, or by a ResID of 128 when invoking the second constructor syntax.

А ты загружал до этого ресурс "LIBRARY"?


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Crut
Дата 11.1.2008, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 27.11.2007
Где: Воронеж

Репутация: нет
Всего: нет



???
PM MAIL   Вверх
artsb
Дата 11.1.2008, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Цитата(Crut @  11.1.2008,  12:17 Найти цитируемый пост)
???

Судя по справке, "LIBRARY" уже должна существовать в ресурсах.



--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Crut
Дата 11.1.2008, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 27.11.2007
Где: Воронеж

Репутация: нет
Всего: нет



А как можно такой ресурс в ехешнике сделать??
PM MAIL   Вверх
artsb
Дата 11.1.2008, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Либо подключить к проекту файл ресурса *.res.
Либо добавить свои ресурсы к файлу Project1.res, созданному автоматически (не рекомендуется!).


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Crut
Дата 11.1.2008, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 27.11.2007
Где: Воронеж

Репутация: нет
Всего: нет



Пофигу. Создал я rc файл:
LIBRARY RT_RCDATA a.txt

Скомпилил, добавил в проект, попробовал - опять не находит!
PM MAIL   Вверх
artsb
Дата 11.1.2008, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



А ты его добавил к a.exe? Ведь ты с этим файлом работаешь.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Crut
Дата 11.1.2008, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 27.11.2007
Где: Воронеж

Репутация: нет
Всего: нет



brcc32 a.rc a.exe
И так сделал - пофигу...
PM MAIL   Вверх
xvr
Дата 11.1.2008, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(Crut @ 11.1.2008,  11:43)
Код

void * hUpdate = BeginUpdateResource("a.exe",false);
char * text = new char[File->Text.Length()];
text = File->Text.c_str();
  TResourceStream *aa = new
 TResourceStream((int)hUpdate,AnsiString("LIBRARY"),RT_RCDATA);
 aa->Write(text, 0);
delete [] text;
EndUpdateResource(hUpdate, false);


Компилица запускаится, а когда я нажимаю на кнопку, выдаёт, что ресурс "LIBRARY" ненайден. Что делать??

Тебе надо загрузить твой a.exe как библиотеку, и ее инстанс подавать в TResourceStream. BeginUpdateResource выдает не тот инстанс. См LoadLibraryEx с флагом LOAD_LIBRARY_AS_DATAFILE
PM MAIL   Вверх
Crut
Дата 11.1.2008, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 27.11.2007
Где: Воронеж

Репутация: нет
Всего: нет



Ща попробуем...

Добавлено через 10 минут и 48 секунд
Код

HANDLE  hUpdate = LoadLibrary("a.exe");
char * text = new char[1000];
 TResourceStream *aa = new
 TResourceStream((int)hUpdate,AnsiString("LIBRARY"),"RT_RCDATA");
 aa->Read(text,sizeof(AnsiString));
 File->Text = text;
free(hUpdate);

Гы)) Терь Access Violation и указывает на kernel32.dll...
А еще открыват файл  GETMEM.inc и ругается на строку 1066!
Кстати хоть брешет, но загружает))
И вот маленький вопрос: TResouceStream->read(void,int) что вводить в int, если неизвестен размер строки?

Добавлено через 13 минут и 31 секунду
LoadLibraryEx тоже...
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0561 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.