Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.09.2011, 13:06   #1
dolphin705
Форумчанин
 
Аватар для dolphin705
 
Регистрация: 02.08.2008
Сообщений: 213
Вопрос Не работает извлечение из ресуров

При выполнении следующего кода не выходит извлечь из себя ресурс

Код:
HM:=GetModuleHandle(0);
    if HM=0 then
    begin
      MessageBox(0,'HM=0',#0,MB_ICONERROR);
      exit;
    end;
    MessageBox(0,R.NameType[i].RName,#0,MB_ICONINFORMATION);
    MessageBox(0,R.NameType[i].RType,#0,MB_ICONINFORMATION);
    RH:=FindResource(HM,R.NameType[i].RName,R.NameType[i].RType);
    if RH=0 then
    begin
      MessageBox(0,'RH=0',#0,MB_ICONERROR);
      exit;
    end;
    RP:=LockResource(LoadResource(HM,RH));
    if not Assigned(RP) then
    begin
      MessageBox(0,'not Assigned(RP)',#0,MB_ICONERROR);
      exit;
    end;
    lstrcpy(Name,R.NameType[i].RName);
    lstrcat(Name,'.');
    lstrcat(Name,R.NameType[i].RType);
    F:=CreateFile(Name,GENERIC_WRITE,0,nil,CREATE_ALWAYS,0,0);
    if F=-1 then
    begin
      MessageBox(0,'F=-1',#0,MB_ICONERROR);
      exit;
    end;
    WriteFile(F,RP^,SizeOfResource(HM,RH),C,nil);
    CloseHandle(F);
    FreeResource(RH);
Ресурс в этот файл записывается таким образом

Код:
RH := BeginUpdateResource(PChar('file.exe'), False);
  for i:=0 to ListBox1.Count - 1 do
  begin
    lstrcpy(Rec.NameType[i].RName, PChar(copy(ExtractFileName(ListBox1.Items[i]),1,pos('.',ExtractFileName(ListBox1.Items[i]))-1)));
    lstrcpy(Rec.NameType[i].RType,PChar(copy(ExtractFileExt(ListBox1.Items[i]),2,Length(ExtractFileExt(ListBox1.Items[i])))));
    Buffer:=ReadFile(ListBox1.Items[i]);
    UpdateResource(RH,Rec.NameType[i].RType,Rec.NameType[i].RName,0,@Buffer[1],Length(Buffer));
  end;
  EndUpdateResource(RH,FALSE);
  F:=CreateFile('file.exe',GENERIC_WRITE,FILE_SHARE_WRITE,nil,3,FILE_ATTRIBUTE_NORMAL,1);
  SetFilePointer(F,GetFileSize(F,nil),nil,0);
  WriteFile(F,Rec,SizeOF(Rec),N,nil);
  CloseHandle(F);
Просмотрел всё что в поиске нашёл, но проблему решить не смог.

Последний раз редактировалось dolphin705; 28.09.2011 в 13:10.
dolphin705 вне форума Ответить с цитированием
Старый 28.09.2011, 14:46   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А в чем затык? Проверял запись? ResHacker достань, и посмотри записался ли ресурс.
Если да то что выдает код загрузки ресурса?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.09.2011, 19:17   #3
dolphin705
Форумчанин
 
Аватар для dolphin705
 
Регистрация: 02.08.2008
Сообщений: 213
По умолчанию

Ресторатором смотрел, ресурс на месте после записи, в рекорде тоже всё ок, по сообщениям видно. Постоянно такая ошибка RH=0
dolphin705 вне форума Ответить с цитированием
Старый 28.09.2011, 21:04   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
R.NameType[i].RType
А тут что, проверял?
И кстати R.NameType[i].RName чему равно?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.09.2011, 18:55   #5
dolphin705
Форумчанин
 
Аватар для dolphin705
 
Регистрация: 02.08.2008
Сообщений: 213
По умолчанию

RNameType = packed record
RName : array [0..20] of Char;
RType : array [0..5] of Char;
end;
dolphin705 вне форума Ответить с цитированием
Старый 29.09.2011, 22:07   #6
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Постоянно такая ошибка RH=0
Об этом в вопросе не надо было сказать? Типа, угадывайте, что у меня не так.

Цитата:
Ресторатором смотрел, ресурс на месте после записи, в рекорде тоже всё ок, по сообщениям видно.
А вот FindResource с тобой не согласен.

Показывай что в .rc и что в RName/RType.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 29.09.2011, 23:12   #7
dolphin705
Форумчанин
 
Аватар для dolphin705
 
Регистрация: 02.08.2008
Сообщений: 213
Сообщение

Цитата:
Сообщение от GunSmoker Посмотреть сообщение
Об этом в вопросе не надо было сказать? Типа, угадывайте, что у меня не так.
Сори, просто из-за этой мароки забыл.

Цитата:
Сообщение от GunSmoker Посмотреть сообщение
Показывай что в .rc и что в RName/RType.
В первом посте я добавил что не пользуюсь компилятором ресурсов, а добавляю с помощью UpdateResource. RName и Type - array[0..20] of char. Прбовал добавлять под размыми именами и типами ресурсов( пример pas.exe - имя pas и тип exe выдаёт в сообщениях, но FindResource не видит.
dolphin705 вне форума Ответить с цитированием
Старый 29.09.2011, 23:33   #8
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
В первом посте я добавил что не пользуюсь компилятором ресурсов, а добавляю с помощью UpdateResource.
Имелось в виду, что показывает просмотрщик ресурсов.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 30.09.2011, 08:43   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
RName и Type - array[0..20] of char
Делфи то какой? Может ему char юникодовый приснился? Может стоит на ansichar заменить?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.09.2011, 09:56   #10
dolphin705
Форумчанин
 
Аватар для dolphin705
 
Регистрация: 02.08.2008
Сообщений: 213
По умолчанию

В rc - passource exe "Data_1.bin" после ресхекера, им же и извлеклось и запустилось нормально. Delphi 7
dolphin705 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Извлечение данных Айвенго Microsoft Office Excel 3 10.05.2011 11:06
Извлечение *.arj davidoff_pk Общие вопросы Delphi 7 08.04.2011 17:42
Извлечение корней MalCer Общие вопросы по Java, Java SE, Kotlin 2 27.03.2010 16:10
Извлечение игр с PC. Wayfarrer Gamedev - cоздание игр: Unity, OpenGL, DirectX 4 25.12.2009 19:59
Извлечение значений из БД? ITM Microsoft Office Excel 4 10.01.2009 23:40